void ConvBaseProjection::initCudnn() { hl_create_filter_descriptor(&filterDesc_, channels_ / groups_, numFilters_ / groups_, filterH_, filterW_); hl_create_tensor_descriptor(&imageDesc_); hl_create_tensor_descriptor(&outputDesc_); hl_create_convolution_descriptor(&convDesc_, imageDesc_, filterDesc_, paddingH_, paddingW_, strideH_, strideW_, dilationH_, dilationW_); // initialize all to default algorithms fwdAlgo_ = 0; bwdFilterAlgo_ = 0; bwdDataAlgo_ = 0; fwdLimitBytes_ = 0; bwdDataLimitBytes_ = 0; bwdFilterLimitBytes_ = 0; workSpaceInBytes_ = 0; }
bool CudnnConvLayer::init(const LayerMap &layerMap, const ParameterMap ¶meterMap) { if (!ConvBaseLayer::init(layerMap, parameterMap)) return false; CHECK(useGpu_) << "CudnnConvLayer only support gpu"; CHECK_EQ(inputLayers_.size(), parameters_.size()); projections_.reserve(inputLayers_.size()); projConf_.reserve(inputLayers_.size()); numFilters_ = config_.num_filters(); CHECK(config_.shared_biases()); for (size_t i = 0; i < inputLayers_.size(); i++) { ProjectionConfig* conf = new ProjectionConfig(); conf->set_type("conv"); conf->set_num_filters(numFilters_); ConvConfig* convConf = conf->mutable_conv_conf(); *convConf = *(config_.mutable_inputs(i)->mutable_conv_conf()); conf->set_input_size(getPrev(i)->getSize()); conf->set_output_size(getSize()); projConf_.emplace_back(conf); projections_.emplace_back(Projection::create(*projConf_[i], parameters_[i], useGpu_)); } if (biases_.get() && sharedBiases_) { hl_create_tensor_descriptor(&biasDesc_); hl_create_tensor_descriptor(&outputDesc_); hl_tensor_reshape(biasDesc_, 1, numFilters_ / groups_[0], 1, 1); biasOffset_ = numFilters_ / groups_[0]; } return true; }
void ConvBaseOperator::computeConvSizes() { hl_create_filter_descriptor( &filterDesc_, channels_, numFilters_, filterSizeY_, filterSize_); hl_create_tensor_descriptor(&imageDesc_); hl_create_tensor_descriptor(&outputDesc_); hl_create_convolution_descriptor(&convDesc_, imageDesc_, filterDesc_, paddingY_, padding_, strideY_, stride_); }