使用python将标签作为LMDB数据中的矩阵

时间:2016-04-13 16:50:00

标签: python pycaffe lmdb

我想在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是否会接受这种格式的标签。

非常感谢任何帮助

1 个答案:

答案 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网络。