Esempio n. 1
0
        /// <summary>
        /// Computes the error gradient w.r.t the inputs.
        /// </summary>
        /// <param name="colTop">top output Blob vector (Length 1), providing the error gradient
        /// with respect to computed outputs.</param>
        /// <param name="rgbPropagateDown">propagate down see Layer::Backward</param>
        /// <param name="colBottom">bottom input Blob vector (Length 1)
        /// </param>
        protected override void backward(BlobCollection <T> colTop, List <bool> rgbPropagateDown, BlobCollection <T> colBottom)
        {
            if (!rgbPropagateDown[0])
            {
                return;
            }

            if (m_nPyramidHeight == 1)
            {
                m_rgPoolingLayers[0].Backward(colTop, rgbPropagateDown, colBottom);
                return;
            }

            List <bool> rgbConcatPropagateDown = Utility.Create <bool>(m_nPyramidHeight, true);

            m_concat_layer.Backward(colTop, rgbConcatPropagateDown, m_colBlobConcatBottomVec);

            for (int i = 0; i < m_nPyramidHeight; i++)
            {
                m_rgFlattenLayers[i].Backward(m_rgFlattenLayerTopVecs[i], rgbPropagateDown, m_rgPoolingTopVecs[i]);
                m_rgPoolingLayers[i].Backward(m_rgPoolingTopVecs[i], rgbPropagateDown, m_rgPoolingBottomVec[i]);
            }

            m_split_layer.Backward(m_colBlobSplitTopVec, rgbPropagateDown, colBottom);
        }
Esempio n. 2
0
 private void WithinChannelBackward(BlobCollection <T> colTop, List <bool> rgbPropagateDown, BlobCollection <T> colBottom)
 {
     if (rgbPropagateDown[0])
     {
         List <bool> rgbProductPropagateDown = Utility.Create <bool>(2, true);
         m_productLayer.Backward(colTop, rgbProductPropagateDown, m_colProductBottomVec);
         m_powerLayer.Backward(m_colPowerTopVec, rgbPropagateDown, m_colPoolTopVec);
         m_poolLayer.Backward(m_colPoolTopVec, rgbPropagateDown, m_colSquareTopVec);
         m_squareLayer.Backward(m_colSquareTopVec, rgbPropagateDown, m_colSquareBottomVec);
         m_splitLayer.Backward(m_colSplitTopVec, rgbPropagateDown, colBottom);
     }
 }