我想在python中创建一个lmdb数据,其中标签不是标量,但每个标签是(1,K)向量,K是类的数量。更具体地说,标签向量在任何地方都有零,除了你有1的相应类索引。
我在python中测试了以下代码:
with env.begin(write=True) as txn:
for i in range(N):
datum = caffe.proto.caffe_pb2.Datum()
datum.channels = X.shape[1]
datum.height = X.shape[2]
datum.width = X.shape[3]
datum.data = X[i].tobytes() # or .tostring() if numpy < 1.9
datum.label = int(y[i])
str_id = '{:08}'.format(i)
txn.put(str_id.encode('ascii'), datum.SerializeToString())
print i+1
但是我得到了这个错误TypeError: only length-1 arrays can be converted to Python scalars
,其中y[i]
是一个numpy(1,k)向量,如上所述。
我也想知道caffe是否会接受这种格式的标签。
非常感谢任何帮助
答案 0 :(得分:1)
是的,caffe支持将numpy数组转换为datum,然后你可以将数据放到lmdb。
使用caffe.io.array_to_datum(numpy_array)
将numpy_array转换为datum,注意numpy_array必须有4个轴,所以如果你想将一个vecttor放入lmdb,你应该初始化一个形状为[1,1,1的numpy_array] M],而M是矢量的长度。
here是一个将图像/地图对写入lmdb的工具,可以将其提供给caffe网络。