如果任何人都知道此错误消息中的三个数字分别是什么意思,那么我一定会很高兴地进行描述,因此可以避免对data_transformer.cpp代码进行审核。
是的,我了解该错误的广泛技巧。.LMDB条目与读取条目的Caffe数据层之间不匹配。但是,为了纠正错误,我需要了解错误消息中的第一个零表示什么。第二个零,第三个。
上下文
I0816 20:28:34.749409 103 layer_factory.hpp:77] Creating layer data I0816 20:28:34.768201 103 db_lmdb.cpp:35] Opened lmdb ../data/emails/inbox I0816 20:28:34.768442 103 net.cpp:84] Creating Layer data I0816 20:28:34.768995 103 net.cpp:380] data -> data I0816 20:28:34.769502 103 net.cpp:380] data -> label F0816 20:28:34.770326 103 data_transformer.cpp:465] Check failed: datum_channels > 0 (0 vs. 0)
更新
我求助于Caffe读取的LMDB记录的字节级擦除,以了解此错误的原因。以下是示例记录:
键=字符串值“ 00000000 _”
记录包括行首格式的序列化标头和数据。为简便起见,所有值均采用十进制形式:
标题
数据(第一行300个数据中的前三个浮点值)
Field = 53表示随后的四个字节中固定长度的32位浮点值。这些值是非VarInt值,并且(应该是小端)形式。
除非我忽略了完全基本的内容,为什么Caffe会在此数据流中看到零通道?
答案 0 :(得分:0)
data_transformer.cpp
中的This line会引发您的错误:
CHECK_GT(datum_channels, 0);
Caffe检查从LMDB读取的Datum
是否有效。您验证datum_channels
失败的检查严格大于零。
您的错误表示您有一个“空”基准:一个具有零通道的条目。
我建议您仔细检查lmdb并确认所有条目均有效。
答案 1 :(得分:0)
LMDB环境不能有多个数据库,否则Caffe将不知道该怎么做,当信息不在预期的caffe.proto
中时,尝试读取第一个DB的信息并按照上述方法抛出错误。格式。
由于遗留原因,我的LMDB环境设置为具有命名数据库,这意味着还存在一个包含数据库名称的单独数据库。因此,即使一个包含感兴趣数据的数据库位于指定的文件路径中,实际上也存在两个数据库。 Caffe正在读取第一个非Caffe数据数据库。
底线:没有命名的LMDB数据库!