使用python将标签作为LMDB数据中的矩阵
我想在python中创建一个lmdb数据,其中标签不是标量,但每个标签都是(1,K)向量,K是类的数量。更具体地说,标签向量除了在相应的类索引中有1外,其他地方都有零 我用python测试了以下代码:使用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
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网络