Program Listing for File convolution.cpp

Return to documentation for file (src/layers/convolution.cpp)

#include "layers/convolution.h"
#include "graph/node_operators_binary.h"

namespace marian {

#ifdef CUDNN
Convolution::Convolution(Ptr<ExpressionGraph> graph) {}

Expr Convolution::apply(Expr x) {
  auto graph = x->graph();

  auto prefix = opt<std::string>("prefix");
  auto kernelDims = opt<std::pair<int, int>>("kernel-dims");
  auto kernelNum = opt<int>("kernel-num");
  auto paddings = opt<std::pair<int, int>>("paddings", std::make_pair(0, 0));
  auto strides = opt<std::pair<int, int>>("strides", std::make_pair(1, 1));

  int layerIn = x->shape()[1];
  auto kernel
      = graph->param(prefix + "_conv_kernels",
                      {layerIn, kernelNum, kernelDims.first, kernelDims.second},
                      inits::glorotUniform());

  auto bias = graph->param(
      prefix + "_conv_bias", {1, kernelNum, 1, 1}, inits::zeros());

  std::vector<Expr> nodes = {x, kernel, bias};
  return Expression<ConvolutionOp>(
      nodes, paddings.first, paddings.second, strides.first, strides.second);
}

Expr Convolution::apply(const std::vector<Expr>&) {
  ABORT("Can't apply convolution on many inputs at once");
  return nullptr;
}
#endif

}  // namespace marian