caffe train error
[] SSD训练出错解决:math_functions.cpp:250 Check failed: a (=b (0 vs -1.19209e-007)
Check failed: a <= b (0 vs. -1.19209e-07)
在进入Caffe-SSD的训练环节时,总是出现如下报错:
math_functions.cpp:250] Check failed: a <= b <0 vs -1.19209e-007>
在谷歌了很多方法后,才解决了问题,目前的最好办法只能规避这个问题,如下:
1.找到math_functions.cpp,并打开第一个路径为~/caffe/src/caffe/util的math_functions.cpp
vi src/caffe/util/math_functions.cpp
2.找到第250行出错的地方,双斜杠屏蔽
template <typename Dtype>
void caffe_rng_uniform(const int n, const Dtype a, const Dtype b, Dtype* r) {
CHECK_GE(n, 0);
CHECK(r);
// CHECK_LE(a, b);
boost::uniform_real<Dtype> random_distribution(a, caffe_nextafter<Dtype>(b));
boost::variate_generator<caffe::rng_t*, boost::uniform_real<Dtype> >
variate_generator(caffe_rng(), random_distribution);
for (int i = 0; i < n; ++i) {
r[i] = variate_generator();
}
}
src/caffe/util/math_functions.cpp
3.重新在caffe路径下make py
这样之后,就可进行训练了。
另外,还有其他的方法,比如在math_functions.cpp的250行前:
我这样尝试没有成功
————————————————
版权声明:本文为CSDN博主「house_s」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/house_s/article/details/82502938
cudnn_conv_layer.cpp:53] Check failed: status == CUDNN_STATUS_SUCCESS (4 vs. 0) CUDNN_STATUS_INTERNAL_ERROR
解决方式 :修改 train.prototxt deploy.prototxt
取消 #engine: CAFFE --》 engine: CAFFEsed -i 's/#engine:/engine:/g' train.prototxt
sed -i 's/#engine:/engine:/g' deploy.prototxt
2、按照1修改后,训练,但读到conv5-3还是报同样的错
(1)搜索资料,发现这个错的原因,还有可能是内存溢出
因此,怀疑是否是内存溢出问题,将batch size从1000改成256,再改成128,再改成10都不行
(2)确定caffe编译时是支持cudnn的,因此,将1中的engine:caffe恢复,再将batch size修改下,训练成功。
————————————————
版权声明:本文为CSDN博主「有石为玉」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41770169/article/details/87113052
问题描述:训练过程中出现blocking_queue.cpp:50] Data layer prefetch queue empty
原因:SSD训练慢的原因是 在生成LMDB文件时没有将图片转化为300*300分辨率大小 所以在训练网络时需要转换图片分辨率 这样就造成了数据输入层预存队列为空 GPU一直在等待数据中 所以造成了训练异常缓慢。(图片resize是在CPU上运行的,CPU数据读入慢于GPU计算,导致GPU处于空闲,使得计算速度下降,迭代时间间隔扩大。)
解决办法:找到文件 /data/VOC0712/create_data.sh ,将width=0改为width=300,将height=0改为height=300.
ln -s /data/opendata/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb trainval_lmdb
/home/ubuntu/caffe/models/weiliu89/build/tools/caffe train --solver=solver_train.prototxt
————————————————
版权声明:本文为CSDN博主「ready_xiao」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41057320/article/details/81080419
training error: Data layer prefetch queue empty
SSD 代码里面有bug, 参考 training error: Data layer prefetch queue empty · Issue https://github.com/weiliu89/caffe/issues/863 #863 ·
weiliu89/caffe如果注释掉 CHECK_LE(a, b) 会出现Data layer prefetch queue empty不注释CHECK_LE(a, b) 会出现错误 a可能大于b for (int i = 0; i < n; ++i) { } 正确的解决方案
template
void caffe_rng_uniform(const int n, const Dtype a, const Dtype b, Dtype* r) {
CHECK_GE(n, 0);
CHECK(r);
CHECK_LE(a, b);
boost::uniform_real
boost::variate_generator variate_generator(caffe_rng(), random_distribution);
r[i] = variate_generator();
}in src/caffe/util/sampler.cpp
@@ -106,6 +106,12 @@ void SampleBBox(const Sampler& sampler, NormalizedBBox* sampled_bbox) {
float bbox_width = scale * sqrt(aspect_ratio);
float bbox_height = scale / sqrt(aspect_ratio);
106 行
+ // Make sure bbox_width & bbox_height <= 1.0
+ // When 0.f > 1 - bbox_width caffe_rng_uniform will get
+ // a error on some devices
bbox_width = bbox_width >= 1.0? 1.0f : bbox_width;
bbox_height = bbox_height >= 1.0? 1.0f : bbox_height;
// Figure out top left coordinates.
float w_off, h_off;
caffe_rng_uniform(1, 0.f, 1 - bbox_width, &w_off);