怎样train from scratch? 不想用预训练模型,但是就是咋都不收敛
如果是训练集上不收敛,那这是不对的。假如你数据量大,那么初始值并不重要。假如你数据量小,那么怎么都能拟合,顶多是过拟合严重,不会不收敛。
■网友
不用预训练是可以的,但是得注意几个点。
(1)、如果网络中有BN层,训练Batch建议大于32。
(2)、数据量要大,使用数据增强(必须的)。
(3)、使用0.1的学习率,如果前期各项损失值(Object得分损失、定位回归损失、分类损失)异常,如正样本损失为0.0001,负样本损失0.999。这个时候,考虑使用简单的优化器,比如梯度下降(无动量),为啥我也知道,我测试出来的。使用0.1的学习率,SSD、YoloV3都可以的,亲测了。效果无异。但是,训练时间较长。给个参考:SSD300-coco数据集-GTX2080-I7, 大约5天到7天。
(4)、随机开始训练,不建议使用小的学习率。DSOD: Learning Deeply Supervised Object Detectors from Scratch,作者Zhiqiang Shen, Zhuang Liu等
■网友
我做二分类也遇到类似问题,LeNet收敛很快,但VGG等模型一直不收敛。
■网友
感谢各位答主们,在数据量小的情况下应该是不会出现不收敛的情况的,相反的要担心的可能是过拟合吧,所以我觉得应该是我写的代码有问题。
我在tutorial随便找了个sequential的最简单的网络,把conv换成fire module,然后慢慢堆叠,发现都是可以收敛的,感觉代码没有问题之后再回去看之前的代码,发现不一样的是梯度下降方式。
原来是optimizer=SGD(lr=0.001, momentum=0.9),后来换成optimizer=\u0026#39;adam\u0026#39;(参数默认lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08),Adam收敛很快,效果好。

之前用SGD的时候训练100epoch,acc一直在0.3左右,后来增加到1000epoch,发现也有在慢慢收敛,只是效果不好。

看acc的曲线之前300个epoch可能是一个local minimum,但是我调大lr也是差不多的曲线。
这里有几个问题还想请教大家:
1.为啥调大用SGD的时候调大lr还是差不多的曲线
2.为啥初始lr=0.001,两种方式结果差异这么大,需要去啃一下paper吗
3.用tensorboard的时候,如果训练超过一次,刷新页面之后不同次的训练数据都画在一起,网络结构也都画在一起(还诡异地连起来了。。。),所以每次都要重启kernel,然后删掉以前的events,再重新打开tensorboard,有没有解决办法 orz
4.把SqueezeNet作者开源的caffe版本拿来训练,超参只改了由于训练数据少必须改的几个(test_iter、iter_size),train_val一点都没改,训练10000次,acc一直在0.2左右,这可是作者训练用的超参啊 orz
■网友
可能你训了假网络.jpg
事实上一般的任务上随便搞个网络不用pretrain一般都还是能收敛的吧,当然好坏另说。至少coco上是可以的,一般分类问题也是可以的
所以要么你代码写错了(比如数据弄错了),要么就是网络初始化没设好,要么learning rate太小或太大了
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 怎样成为一名合格的Python程序员?
- 怎样评价华为、诺基亚、中兴中标中国移动高端路由交换设备扩容集采
- 怎样评价类似前橙会、百老汇、南极圈这样类型的离职帮抱团,对企业的积极意义和消极意义
