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

使用python将标签作为LMDB数据中的矩阵,python,pycaffe,lmdb,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] d

我想在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
将env.begin(write=True)作为txn:
对于范围(N)中的i:
datum=caffe.proto.caffe_pb2.datum()
datum.channels=X.shape[1]
基准高度=X形状[2]
基准面宽度=X形[3]
datum.data=X[i].tobytes()#或.tostring(),如果numpy<1.9
datum.label=int(y[i])
str_id='{:08}'。格式(i)
txn.put(str_id.encode('ascii'),datum.SerializeToString())
打印i+1
但是我得到了这个错误
TypeError:只有length-1数组可以转换为Python标量
,其中
y[I]
是如上所述的numpy(1,k)向量

我还想知道caffe是否会接受这种标签格式


非常感谢您的帮助

是的,caffe支持将numpy阵列转换为数据,然后您可以将数据放入lmdb

使用
caffe.io.array_to_datum(numpy_array)
将numpy_数组转换为datum,请注意numpy_数组必须有4个轴,因此如果要将vector放入lmdb,应使用[1,1,1,M]形状初始化numpy_数组,而M是向量的长度

是一种将图像/映射对写入lmdb的工具,lmdb可馈送至caffe网络