3

執行以下.prototxt時,我得到一個錯誤的斑點> 4軸和我完全不知道爲什麼我到達那裏的錯誤:ND BLOB支持朱古力:傳統的存取失敗

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-Blobs

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. 

我需要去一個特定的分支?我只是從caffe-master-branch再次拉出,以確保它是最新版本。然後我做了一個make clean make all命令,但它仍然不起作用。

回答

3

AFAIK,這個錯誤來自於"Xavier"填料:這種填料計算輸入和輸出通道之間的比率。如果你用一個不同的填充物替換它,你應該使用ND blob。

+1

似乎@thigi可以選擇'GaussianFiller'。 – Dale

0

當我刪除line 140 blob.hpp中的檢查確實有效。這是解決問題的方法之一,但不是最好的方法。

(但這不可能是正確的解決辦法是有什麼事嗎?)

+0

你是對的:這不是一個合適的解決方案... – Shai

2

作爲Shai's answer補充,以便以與​​和InnerProduct層中, 「Xavier」 填料code

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."; 
} 
在CAFFE

,應多這樣兼容:

... 
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 

這個小小的變化也應該讓你的原型文件起作用。

+1

您可能希望將此更改建議爲BVLC/caffe的PR ... – Shai

+1

@Shai好的,我會試試看。謝謝。 – Dale