/*virtual*/ void ReduceElementsNode<ElemType>::ForwardProp(const FrameRange& fr) /*override*/ { // get the args size_t rank = DetermineElementwiseTensorRank(); auto result = ValueTensorFor(rank, fr); auto input = Input(0)->ValueTensorFor(rank, fr); // the actual operation is a Copy with reduction, where the magic is in the reduction op result.DoUnaryOpOf(0, input, 1, ElementWiseOperator::opCopy, m_reductionOp); // note: we can implement "Mean" by passing 1/dim for alpha }
/*virtual*/ void ReduceElementsNode<ElemType>::ForwardProp(const FrameRange& fr) /*override*/ { // get the args size_t rank = DetermineElementwiseTensorRank(); auto result = ValueTensorFor(rank, fr); auto input = InputRef(0).ValueTensorFor(rank, fr); // the actual operation is a Copy with reduction, where the magic is in the reduction op // For "Mean", m_scale is 1/#elements, and 1 otherwise. result.DoUnaryOpOf(0, input, m_scale, ElementWiseOperator::opCopy, m_reductionOp); }