我试图理解如何在Caffe中解释数据。 为此,我看了Minst Tutorial 查看输入数据定义:
layers {
name: "mnist"
type: DATA
data_param {
source: "mnist_train_lmdb"
backend: LMDB
batch_size: 64
scale: 0.00390625
}
top: "data"
top: "label"
}
我现在已经查看了mnist_train_lmdb并获取了其中一个条目(以十六进制显示):
0801101C181C229006
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000054B99F973C2400000000000000000000000000000000
000000000000DEFEFEFEFEF1C6C6C6C6C6C6C6C6AA34000000000000
00000000000043724872A3E3FEE1FEFEFEFAE5FEFE8C000000000000
000000000000000000000011420E4343433B15ECFE6A000000000000
00000000000000000000000000000000000053FDD112000000000000
000000000000000000000000000000000016E9FF5300000000000000
000000000000000000000000000000000081FEEE2C00000000000000
000000000000000000000000000000003BF9FE3E0000000000000000
0000000000000000000000000000000085FEBB050000000000000000
00000000000000000000000000000009CDF83A000000000000000000
0000000000000000000000000000007EFEB600000000000000000000
00000000000000000000000000004BFBF03900000000000000000000
0000000000000000000000000013DDFEA60000000000000000000000
00000000000000000000000003CBFEDB230000000000000000000000
00000000000000000000000026FEFE4D000000000000000000000000
00000000000000000000001FE0FE7301000000000000000000000000
000000000000000000000085FEFE3400000000000000000000000000
000000000000000000003DF2FEFE3400000000000000000000000000
0000000000000000000079FEFEDB2800000000000000000000000000
0000000000000000000079FECF120000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
2807
(我在这里添加了换行符,以便能够看到'7'数字。)
现在我的问题是,描述了这种格式?或者说不同的地方定义前36个字节是某种标题,最后8个字节有一些标签对应?
我如何构建自己的数据? Blob Tutorial和Layers Definition都没有提供有关所需格式的信息。 我的目的不是使用图像数据,而是使用时间序列
谢谢!
答案 0 :(得分:15)
我意识到协议缓冲区必须在这里发挥作用。因此,我尝试针对caffe.proto中定义的某些类型对其进行反序列化。
Datum 似乎非常合适:
{Caffe.Datum}
Channels: 1
Data: {byte[784]}
Encoded: false
FloatData: Count = 0
Height: 28
Label: 7
Width: 28
所以答案很简单:它是' Datum'的序列化表示。按caffe.proto
定义的类型化实例顺便说一下。因为英语不是我的母语,我必须首先意识到" Datum"是数据"
的单一形式在使用您自己的数据时,其结构如下:
数据的传统blob维度是数字N x通道 K x高度H x宽度W. Blob存储器在布局中是行主要的,所以最后一个 /最右边的尺寸变化最快。例如,索引处的值 (n,k,h,w)物理上位于索引((n * K + k)* H + h)* W + w。
答案 1 :(得分:2)
我可以尝试回答你的第二个问题。由于Caffe只采用lmdb,hdf5等多种选定格式的数据,因此最好将数据转换(或生成 - 如果是合成数据)这些格式。以下链接可以帮助您。如果您在Python中使用import hdf5
时遇到问题,那么您可以参考this页面。
Creating an LMDB file in Python