Caffe错误-数据转换器检查失败:datum_channels> 0(0与0)

时间:2018-08-20 04:13:06

标签: machine-learning neural-network deep-learning caffe lmdb

如果任何人都知道此错误消息中的三个数字分别是什么意思,那么我一定会很高兴地进行描述,因此可以避免对data_transformer.cpp代码进行审核。

是的,我了解该错误的广泛技巧。.LMDB条目与读取条目的Caffe数据层之间不匹配。但是,为了纠正错误,我需要了解错误消息中的第一个零表示什么。第二个零,第三个。

上下文

  • Caffe数据层正在从LMDB源读取
  • LMDB条目包含自定义的非图像数据,该数据包含(c xh x w)1 x 1024 x 300浮点值
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 _”

记录包括行首格式的序列化标头和数据。为简便起见,所有值均采用十进制形式:

标题

  1. 字节0 = 8字节1 = 1(类型为int32的字段1 = 1)
  2. 字节2 = 16字节3 = 128字节4 = 8(int32类型的字段2 = 1024)
  3. 字节5 = 24字节6 = 172字节7 = 2(int32类型的字段3 = 300)
  4. 字节8 = 40字节9 = 0(int32类型的字段5 = 0)
  5. 字节10 = 56字节11 = 0(布尔类型0的字段7)

数据(第一行300个数据中的前三个浮点值)

  1. 字节12 = 53字节13 = 64字节14 = 164字节15 = 95字节16 = 190
  2. 字节17 = 53字节18 = 176字节19 = 254字节20 = 143字节21 = 190
  3. 字节22 = 53字节23 = 24字节24 = 96字节25 = 191字节26 = 62

Field = 53表示随后的四个字节中固定长度的32位浮点值。这些值是非VarInt值,并且(应该是小端)形式。

除非我忽略了完全基本的内容,为什么Caffe会在此数据流中看到零通道?

2 个答案:

答案 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数据库!