示例#1
0
        /// <summary>
        /// Conv2s the backward input frame.
        /// </summary>
        /// <param name="gradOutput">The grad output.</param>
        /// <param name="gradInput">The grad input.</param>
        /// <param name="weight">The weight.</param>
        /// <param name="fgradInput">The fgrad input.</param>
        /// <param name="cd">The cd.</param>
        private static void Conv2BackwardInputFrame(NDArray gradOutput, NDArray gradInput, NDArray weight, NDArray fgradInput, ConvolutionDesc2d cd)
        {
            using (var gradOutput2d = gradOutput.View(gradOutput.Shape[0], gradOutput.Shape[1] * gradOutput.Shape[2]))
            {
                Ops.Addmm(fgradInput, 0, fgradInput, 1, weight, gradOutput2d);
            }

            Ops.Fill(gradInput, 0);

            IntPtr fgradInputPtr, gradInputPtr;

            using (NativeWrapper.BuildTensorRefPtr(fgradInput, out fgradInputPtr))
                using (NativeWrapper.BuildTensorRefPtr(gradInput, out gradInputPtr))
                {
                    CpuOpsNative.TS_Unfolded_Acc(fgradInputPtr, gradInputPtr, cd.kW, cd.kH, cd.dW, cd.dH, cd.padW, cd.padH,
                                                 (int)gradInput.Shape[0], (int)gradInput.Shape[2], (int)gradInput.Shape[1],
                                                 (int)gradOutput.Shape[2], (int)gradOutput.Shape[1]);
                }
        }