我试图弄清楚为什么我的 MatCaffe 实现无法从我使用 convert_imageset.bin 创建的火车 lmdb 中弹出。
我所做的基本上就是这样:
solver = caffe.Solver(solverFile);
solver.step(500);
在查看终端时,最后一条语句之后的输出是这样的:
I0322 11:15:11.830241 **098 net.cpp:228] data does not need backward computation.
I0322 11:15:11.830250 **098 net.cpp:270] This network produces output accuracy
I0322 11:15:11.830257 **098 net.cpp:270] This network produces output loss
I0322 11:15:11.830281 **098 net.cpp:283] Network initialization done.
I0322 11:15:11.830377 **098 solver.cpp:60] Solver scaffolding done.
I0322 11:15:16.625566 **098 solver.cpp:341] Iteration 0, Testing net (#0)
I0322 11:15:19.976579 **098 solver.cpp:409] Test net output #0: accuracy = 0.445407
I0322 11:15:19.976654 **098 solver.cpp:409] Test net output #1: loss = 0.693147 (* 1 = 0.693147 loss)
I0322 11:15:20.317916 **098 solver.cpp:237] Iteration 0, loss = 0.693147
I0322 11:15:20.317989 **098 solver.cpp:253] Train net output #0: loss = 0.693147 (* 1 = 0.693147 loss)
I0322 11:15:20.318009 **098 sgd_solver.cpp:106] Iteration 0, lr = 0.001
I0322 11:15:21.342550 **098 blocking_queue.cpp:50] Data layer prefetch queue empty
即使我删除了 locks.mdb 以确保在我重新启动此过程时没有留下任何锁,我也可以重现此问题。在消息之后,我只能硬关闭 Matlab。我用 Matlab LMDB 检查了 lmdb 和两者的内容,我的训练和测试 lmdb 似乎没问题。我用来生成 lmdb 的参数:shuffle。
注意(可能是这里问题的根源):目前我正面临这个星座的 MEX 问题。在我的实施的第一次运行中,我收到错误消息
“来自 MEX 文件的意外未知异常.. ”
终端输出如下所示:
I0322 11:42:09.465801 **875 layer_factory.hpp:77] Creating layer data
I0322 11:42:09.466012 **875 net.cpp:106] Creating Layer data
I0322 11:42:09.466030 **875 net.cpp:411] data -> data
I0322 11:42:09.466053 **875 net.cpp:411] data -> label
I0322 11:42:09.469091 **151 db_lmdb.cpp:38] Opened lmdb /home/user/caffe-master/data/train/lmdbTrain
到目前为止我已经尝试过: 我实现了一个 try-catch 块,以便通过使用“caffe.reset_all();”释放指针、空格等(希望如此),以便在任何情况下都会调用此方法。在第二次运行时,我得到了上面提到的输出。似乎我的第一次运行阻止了 lmdb 访问,导致我在第一次和第二次运行之间手动删除 locks.mdb -> 不幸的是,效果相同。命令行的“手动”训练确实适用于相同的 lmdb。只有 matcaffe 运行似乎会引发这些问题和疑问。请注意,我想使用 Matcaffe 手动初始化我的层权重 - .prototxt 中的“weight_filler”不是一个选项。我的 MatCaffe 实现是从 2016 年 1 月开始的,我'我还使用正确的 gcc 版本重新编译了 caffe_ 的 mex 文件(在它给我警告我的 gcc 版本应该是“x”-> 更改为“x”并重新编译之前)。
请问您还有其他想法、建议或意见吗?
谢谢!