Machine learning ND Blob支持caffe:Blob的旧访问器失败>;4轴

Machine learning ND Blob支持caffe:Blob的旧访问器失败>;4轴,machine-learning,neural-network,deep-learning,caffe,conv-neural-network,Machine Learning,Neural Network,Deep Learning,Caffe,Conv Neural Network,我在执行以下.prototxt时出错,我完全不知道为什么会出错: layer { name: "conv" type: "Convolution" bottom: "image" top: "conv" convolution_param { num_output: 2 kernel_size: 5 pad: 2 stride: 1 weight_filler {

我在执行以下
.prototxt
时出错,我完全不知道为什么会出错:

layer {
    name: "conv"
    type: "Convolution"
    bottom: "image"
    top: "conv"
    convolution_param {
        num_output: 2
        kernel_size: 5
        pad: 2
        stride: 1
        weight_filler {
            type: "xavier"
        }
        bias_filler {
            type: "constant"
            value: 0
        }
    }
}
这是错误输出。正如我在最新的
caffe master branch
中所看到的,应该可以使用
5D BLOB

I1202 14:54:58.617269  2393 hdf5_data_layer.cpp:93] Number of HDF5 files: 9
I1202 14:54:58.631134  2393 hdf5.cpp:35] Datatype class: H5T_INTEGER
I1202 14:54:59.159739  2393 net.cpp:150] Setting up train-data
I1202 14:54:59.159760  2393 net.cpp:157] Top shape: 1 1 1 128 128 (16384)
I1202 14:54:59.159765  2393 net.cpp:157] Top shape: 1 1 8 128 128 (131072)
I1202 14:54:59.159766  2393 net.cpp:165] Memory required for data: 589824
I1202 14:54:59.159773  2393 layer_factory.hpp:77] Creating layer down_level_0_conv
I1202 14:54:59.159790  2393 net.cpp:100] Creating Layer down_level_0_conv
I1202 14:54:59.159795  2393 net.cpp:434] down_level_0_conv <- image
I1202 14:54:59.159804  2393 net.cpp:408] down_level_0_conv -> down_level_0_conv
F1202 14:54:59.159915  2393 blob.hpp:140] Check failed: num_axes() <= 4 (5 vs. 4) Cannot use legacy accessors on Blobs with > 4 axes.
I1202 14:54:58.617269 2393 hdf5_data_layer.cpp:93]hdf5文件数:9
I1202 14:54:58.631134 2393 hdf5.cpp:35]数据类型类:H5T_整数
I1202 14:54:59.159739 2393 net.cpp:150]设置列车数据
I1202 14:54:59.159760 2393净。cpp:157]顶部形状:112128(16384)
I1202 14:54:59.159765 2393净。cpp:157]顶部形状:1 18 128 128(131072)
I1202 14:54:59.159766 2393 net.cpp:165]数据所需的内存:589824
I1202 14:54:59.159773 2393层工厂。hpp:77]创建层下层0转换
I1202 14:54:59.159790 2393 net.cpp:100]
I1202 14:54:59.159795 2393 net.cpp:434]down_level_0_conv down_level_0_conv
F1202 14:54:59.159915 2393 blob.hpp:140]检查失败:num_axes()4个轴。

我需要去某个分行吗?我刚刚再次从caffe master branch调出,以确保它是最新版本。然后我执行了一个make clean make all命令,但它仍然不起作用。

当我删除签入
行140 blob.hpp时,它确实起作用。这是解决问题的一种方法,但不是最好的方法


(但这不是正确的解决方案。还有其他问题吗?

好的,这个错误来自
“Xavier”
填充程序:这个填充程序计算输入和输出通道之间的比率。如果用不同的填充物替换,则可以使用ND blob。

作为的补充,为了与
ND卷积
内积
层兼容,“
Xavier
”填充物


这个小小的改变也会让你的prototxt工作起来。

看来@thigi可以选择一个
GaussianFiller
@Shai好的,我来试试。谢谢
virtual void Fill(Blob<Dtype>* blob) {
...
int fan_in = blob->count() / blob->num();
int fan_out = blob->count() / blob->channels();
Dtype n = fan_in;  // default to fan_in
...
Dtype scale = sqrt(Dtype(3) / n);
caffe_rng_uniform<Dtype>(blob->count(), -scale, scale,
        blob->mutable_cpu_data());
CHECK_EQ(this->filler_param_.sparse(), -1)
         << "Sparsity not supported by this Filler.";
}
...
int fan_in = blob->count() / blob->shape(0);
int fan_out = blob->num_axis() == 2 ? blob->shape(0) : blob->count() / blob->shape(1);
...//original stuff