我的caffe学习之路<第十三天>

本文记录了在神经网络训练过程中遇到的两个主要问题及其解决方案。一是迭代时计算loss的错误,二是snapshot输出时出现的Segmentation fault。通过逐步排查与修正,最终解决了这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

中间空的十天做了包括:新建一个层generate_layer,写forward(1-2天),看bp算法(1-2天),写backward(1-2天),写lmdb输入并搭网络(1-2天),跑程序(1-2天),调输入的bug(1-2天,那lmdb生成的uint8的数据不能直接读入,调了好久)。


原来是用deconv做unpool的事,现在在将unpooling移植到我们的网络上来。


bug:第一次Iteration可以计算loss,第二次 Iteration计算错误

解决:最后的score的大小为5120*4,我们的标签是5120才能计算loss,看loss层的实现,看反卷积层的实现,添加LOG代码,发现第一个可以计算,第二个错误,怀疑unpool大小只初始化一次,经过unpool后大小保持第一次的大小,添加LOG代码,输出layersetup过程和reshape过程中unpool的height_,发现layersetup只运行了一次而reshape每次都会执行,所以unpool_height_的更新应该放在reshape里,然后make一下,搞定。


删掉调试信息并注释掉一些无用代码,我的unpool就能跑了,接下来就是看内部实现(-_-)。

先跑个一万次玩玩。。。(忘记make了,全是调试信息,ctr+c还停不下来-_-)

没拷贝权重,需要先调参数。。。不然下降太慢。。。

直接用测试集验证准确率试试,没ac层不好看结果啊,加个,发现准确率低且不变。。。


bug2:snapshot输出的时候出现Segmentation fault,这个错也发生在caffe训练完后,这应该是什么bug吧,上次遇到这个错是将cpu改为gpu就好了,没有真正解决这个问题。

暂未解决:先改小snapshot值,快速报错,在solver.cpp里添加输出代码,发现在ToProto出错,solver调用net,net调用layer的ToProto,layer的本体在include里,发现是个虚函数,但有实现,layer又调用blobs的实现,这个组织。。。一级级管下来。输出发现就是不能执行到blob层。

调了一天没调出来,感觉是我新加入的层有问题,把它删掉后其他的网络不会出现Segmentation Fault,最后还是自己写的东西不兼容。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值