我对Caffe的主要抱怨是,尽管文档中有一些示例,但没有确定的参考指南.这尤其适用于Python接口(如果有参考指南,那会很棒),也适用于prototxt.看来,要正确使用Caffe,用户必须已经是Google Protobuf和CUDA的专家.遗憾的是,我在这两件事上都没有经验.
那么,如何在Python接口中查找事物(例如函数签名,各种变量的支持值等)?从this example开始,我们可以看到可以在Python中创建数据层,如下所示.
n.data, n.label = L.Data(batch_size=batch_size, backend=P.Data.LMDB, source=lmdb,
transform_param=dict(scale=1./255), ntop=2)
这非常好,因为之后我们可以将用Python创建的网络导出到prototxt.但是,问题在于我不知道如何制作稍微不同的数据层(例如,具有不同的参数或不同的后端),而且似乎无处可寻.例如,如何使用PyCaffe代码在prototxt中构造以下层?
layer {
name: "image"
type: "HDF5Data"
top: "image"
include {
phase: TRAIN
}
hdf5_data_param {
source: "./training_data_paths.txt"
batch_size: 64
}
}
我在哪里查找要调用的(Python)函数以及它们采用的参数以及这些参数的有效值是多少?我在Caffe Users’ Group上提出了基本相同的问题,但没有人回答.
解决方法:
caffe的原缓冲定义可以在$CAFFE_ROOT/src/caffe/proto/caffe.proto
处找到,在那里您可以看到不同的参数及其接受的值.
要使用caffe.NetSpec()接口创建“ HDF5Data”层而不是“ Data”层,您可以
n.image = L.HDF5Data(hdf5_data_param={'source': './training_data_paths.txt',
'batch_size': 64},
include={'phase': caffe.TRAIN})