最近看了densenet这篇论文,论文作者给了基于caffe的源码,自己在电脑上跑了下,但是出现了Message type “caffe.PoolingParameter” has no field named “ceil_mode”.的错误,现将解决办法记载如下。主要是参考
(https://github.com/BVLC/caffe/pull/3057/files)。错误原因:由于caffe的版本的原因,现用的caffe的源码中的pooling层没有ceil_mode
这个函数,因此解决办法也是在现在的源码中网pooling层中添加这个参数以及相关的代码,并重新编译caffe即可。
1、修改pooling_layer.hpp文件PoolingLayer类
在pooling_layer.hpp中往PoolingLayer类中添加ceil_mode_这个参数,修改如下:
int height_, width_;
int pooled_height_, pooled_width_;
bool global_pooling_;
bool ceil_mode_; //添加的类成员变量
Blob<Dtype> rand_idx_;
Blob<int> max_idx_;
2、修改pooling_layer.cpp文件中相关参数
主要涉及到LayerSetUp函数和Reshape函数。LayerSetUp函数修改如下:
|| (!pool_param.has_stride_h() && !pool_param.has_stride_w()))
<< "Stride is stride OR stride_h and stride_w are required.";
global_pooling_ = pool_param.global_pooling();
ceil_mode_ = pool_param