Caffe: 使用经验总结

本文总结了Caffe深度学习框架的使用经验,包括深度学习中学习率的调整、训练时Loss变为NaN的原因及解决办法。此外,还介绍了如何利用Caffe的Debug信息进行问题定位,如检查Blob数据结构、前向传播、损失和梯度、反向传播等,帮助优化训练过程。

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

引言

在深度学习框架caffe的使用过程中,加深了对神经网络的理解,同时也将神经网络知识从理论落到实处。希望日后多多拿代码时间,将该总结继续增广~~

深度学习中常用的调节参数

学习率

步长的选择:你走的距离长短,越短当然不会错过,但是耗时间。步长的选择比较麻烦。步长越小,越容易得到局部最优化(到了比较大的山谷,就出不去了),而大了会全局最优。一般来说,如ResNet前32k步,很大,0.1;到了后面,迭代次数增高,下降0.01,再多,然后再小一些。

caffe训练时Loss变为nan的原因

由小变大易出nan

原因:有小变大过程中,某个梯度值变得特别大,使得学习过程难以为继

例如:10x10x256的输入,输出如果是20x20x256或者10x10x512,如果是使用Inception-ResNet-v2或者直接进行卷积操作,很容易出现nan的情况。

具体解决方案:

使用ResNet-Block或者Inception技术,最后的结果通过Bitwise Operation进行组合,而不是采用按channel Concatenate进行的。

尤其是BitWise multi进行组合的时候,往往会产生很大的数据悬殊,会导致梯度爆炸现象从而出现Loss 为nan

梯度爆炸

原因:梯度变得非常大,使得学习过程难以继续

现象:观察log,注意每一轮迭代后的loss。loss随着每轮迭代越来越大,最终超过了浮点型表示的范围,就变成了NaN。

措施

  • 减小solver.prototxt中的base_lr,至少减小一个数量级。如果有多个loss layer,需要找出哪个损失层导致了梯度爆炸,并在train_val.prototxt中减小该层的loss_weight,而非是减小通用的base_lr
  • 设置<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值