I\'m using Caffe for classifying non-image data using a quite simple CNN structure. I\'ve had no problems training my network on my HDF5-data with dimensions n x 1 x 156 x 12. H
Even small hints would be greatly appreciated!
I am stuck too so not much help, sorry. Might want to skip to the end.
net.inputs is a @property function which supposedly generated the names of the input layer(s).
@property
def _Net_inputs(self):
return [list(self.blobs.keys())[i] for i in self._inputs]
Where list(self.blobs.keys()) for you would be
['data', 'feature_conv', 'conv1', 'pool1', 'conv2', 'fc1', 'accuracy', 'loss']
Since inputs has to match kwargs.keys() = ['data'] we can conclude that net._inputs should have been [0]. Somehow.
Since _inputs isn't used anywhere else in pycaffe.py I have a look at _caffe.cpp. Around line 222 it says
.add_property("_inputs", p::make_function(&Net::input_blob_indices,
bp::return_value_policy()))
So _inputs are the input_blob_indices and it makes sense that these should be [0] for your network.
input_blob_indices in turn is simply a function that returns net_input_blob_indices_ in include/caffe/net.hpp
inline const vector& input_blob_indices() const { return net_input_blob_indices_; }
...which is only used in src/caffe/net.cpp, but I can't find it being defined or assigned anywhere.
I have tried with type: Data and type: MemoryData but that doesn't make a difference. What does work is using
input: "data"
input_dim: 1
input_dim: 3
input_dim: 227
input_dim: 227
...instead of a layer. In that case net._inputs = [0] and net.inputs = ['data'] (actually net._inputs is a caffe._caffe.IntVec object but list(net._inputs) = [0]).
TLDR: It is starting to look a lot like a bug so I submitted it: https://github.com/BVLC/caffe/issues/2246
P.s. it seems like you are converting ndarray to datum and then back again. Does this have a purpose?