My main gripe about Caffe is that although there are a few examples in the documentation, there is no definitive reference guide. This applies especially to the Python interface (which would be great if there was a reference guide), and also to prototxt. It seems that in order to use Caffe properly, the user must already be an expert in Google Protobuf and CUDA. Shame to admit I have no experience in either of those things.
So how do I look up things (like function signature, supported values for various variables, and so on) in the Python interface? From this example we can see that we can create a data layer in Python as follows.
n.data, n.label = L.Data(batch_size=batch_size, backend=P.Data.LMDB, source=lmdb,
transform_param=dict(scale=1./255), ntop=2)
This is very nice, because afterwards we can export the network we made in Python to prototxt. The problem however, is that I have no idea how to make a slightly different data layer (with different parameters or different backends for example), and there seems to be nowhere to look these things up. How, for example, do I construct the following layer in prototxt using PyCaffe code?
layer {
name: "image"
type: "HDF5Data"
top: "image"
include {
phase: TRAIN
}
hdf5_data_param {
source: "./training_data_paths.txt"
batch_size: 64
}
}
Where do I look up what (Python) functions to call and what arguments they take and what are the valid values for the arguments? I've asked essentially the same question on Caffe Users' Group but no one answered.