コード例 #1
0
ファイル: conv_connection.hpp プロジェクト: suspy/mlpack
  void FeedBackward(const arma::Cube<eT>& error)
  {
    delta = arma::zeros<arma::Cube<eT> >(inputLayer.InputActivation().n_rows,
                                         inputLayer.InputActivation().n_cols,
                                         inputLayer.InputActivation().n_slices);

    for (size_t outputmap = 0; outputmap < inputLayer.OutputMaps(); outputmap++)
    {
      for (size_t inputmap = 0; inputmap < outputLayer.OutputMaps(); inputmap++)
      {
        arma::Cube<eT> errorSlices = error.slices(inputmap *
            inputLayer.LayerSlices(), (inputmap * inputLayer.LayerSlices()) +
            inputLayer.LayerSlices() - 1);

        arma::Mat<eT> rotatedFilter;
        Rotate180(weights.slice(
            outputmap * outputLayer.OutputMaps() + inputmap), rotatedFilter);

        arma::Cube<eT> output;
        BackwardConvolutionRule::Convolution(errorSlices, rotatedFilter, output);

        delta.slices((outputmap * inputLayer.LayerSlices()),
            (outputmap * inputLayer.LayerSlices()) +
            inputLayer.LayerSlices() - 1) += output;
      }
    }
  }
コード例 #2
0
ファイル: conv_layer.hpp プロジェクト: shenzebang/mlpack
void Gradient(const arma::Cube<eT>& d, arma::Cube<eT>& g)
{
    g = arma::zeros<arma::Cube<eT> >(weights.n_rows, weights.n_cols,
                                     weights.n_slices);

    for (size_t outMap = 0; outMap < outMaps; outMap++)
    {
        for (size_t inMap = 0, s = outMap; inMap < inMaps; inMap++, s += outMaps)
        {
            arma::Cube<eT> inputSlices = inputParameter.slices(inMap, inMap);
            arma::Cube<eT> deltaSlices = d.slices(outMap, outMap);

            arma::Cube<eT> output;
            GradientConvolutionRule::Convolution(inputSlices, deltaSlices, output);

            for (size_t i = 0; i < output.n_slices; i++)
                g.slice(s) += output.slice(i);
        }
    }
}
コード例 #3
0
ファイル: conv_connection.hpp プロジェクト: suspy/mlpack
  void FeedForward(const arma::Cube<eT>& input)
  {
    for (size_t outputmap = 0; outputmap < outputLayer.OutputMaps(); outputmap++)
    {
      for (size_t inputmap = 0; inputmap < inputLayer.OutputMaps(); inputmap++)
      {
        arma::Cube<eT> inputSlices = input.slices(
            inputmap * inputLayer.LayerSlices(),
            (inputmap * inputLayer.LayerSlices()) +
            inputLayer.LayerSlices() - 1);

        arma::Cube<eT> output;
        ForwardConvolutionRule::Convolution(inputSlices,
            weights.slice(inputmap * outputLayer.OutputMaps() +
            outputmap), output);

        outputLayer.InputActivation().slices(
            (outputmap * inputLayer.LayerSlices()),
            (outputmap * inputLayer.LayerSlices()) +
            inputLayer.LayerSlices() - 1) += output;
      }
    }
  }
コード例 #4
0
ファイル: trainer.hpp プロジェクト: Andrew-He/mlpack
 const arma::Cube<eT> Element(arma::Cube<eT>& input, const size_t sliceNum)
 {
   return input.slices(sliceNum, sliceNum);
 }