// Get a layer using a LayerParameter. static shared_ptr<Layer<Dtype> > CreateLayer(const LayerParameter& param) { const string& type = param.type(); CreatorRegistry& registry = Registry(); CHECK_EQ(registry.count(type), 1) << "Unknown layer type: " << type << " (known types: " << LayerTypeListString() << ")"; return registry[type](param); }
// Get a layer using a LayerParameter. static shared_ptr<Layer<Dtype> > CreateLayer(const LayerParameter& param) { if (Caffe::root_solver()) { LOG(INFO) << "Creating layer " << param.name(); } const string& type = param.type(); CreatorRegistry& registry = Registry(); CHECK_EQ(registry.count(type), 1) << "Unknown layer type: " << type << " (known types: " << LayerTypeListString() << ")"; return registry[type](param); }
// Get a layer using a LayerParameter. // 3-2给定层的类型,创建层 static shared_ptr<Layer<Dtype> > CreateLayer(const LayerParameter& param) { if (Caffe::root_solver()) { LOG(INFO) << "Creating layer " << param.name(); } // 从参数中获得类型字符串 const string& type = param.type(); // 获得注册表指针 CreatorRegistry& registry = Registry(); // 测试是否查找到给定type的Creator CHECK_EQ(registry.count(type), 1) << "Unknown layer type: " << type << " (known types: " << LayerTypeListString() << ")"; // 这里大概就直接new了一个新的layer类。DataLayer,ConvolutionLayer,... // 调用对应的层的Creator函数 return registry[type](param); }