Layer<Ftype, Btype>::Layer(const LayerParameter& param) : LayerBase(param) { // Set phase and copy blobs (if there are any). phase_ = layer_param_.phase(); debug_ = layer_param_.debug(); // Data&Math types if (!layer_param_.has_forward_type()) { layer_param_.set_forward_type(tp<Ftype>()); } if (!layer_param_.has_backward_type()) { layer_param_.set_backward_type(tp<Btype>()); } if (!layer_param_.has_forward_math()) { layer_param_.set_forward_math(tpmax<Ftype, float>()); } if (!layer_param_.has_backward_math()) { layer_param_.set_backward_math(tpmax<Btype, float>()); } Type ftype = layer_param_.forward_type(); Type ftype_t = tp<Ftype>(); if (ftype != ftype_t) { DLOG(WARNING) << "Overriding LayerParameter's forward type " << Type_Name(ftype) << " by template's " << Type_Name(ftype_t) << " for Layer '" << layer_param_.name() << "' of type '" << layer_param_.type() << "'"; layer_param_.set_forward_type(ftype_t); } Type btype = param.backward_type(); Type btype_t = tp<Btype>(); if (btype != btype_t) { DLOG(WARNING) << "Overriding LayerParameter's backward type " << Type_Name(btype) << " by template's " << Type_Name(btype_t) << " for Layer '" << layer_param_.name() << "' of type '" << layer_param_.type() << "'"; layer_param_.set_backward_type(btype_t); } if (layer_param_.blobs_size() > 0) { blobs_.resize(layer_param_.blobs_size()); for (int i = 0; i < layer_param_.blobs_size(); ++i) { blobs_[i] = Blob::create<Ftype>(); blobs_[i]->FromProto(layer_param_.blobs(i)); } } }