基于https://www.kaggle.com/jeffd23/deep-learning-in-the-deep-blue-lb-1-279
2019-03-05 终于自己手写了一波自定义数据生成器,但是最终model的fit_generator效果并不理想。令人费解的是,我只是变动了一下数据生成器,只是将原来代码中的所有数据放在同一个数组里的方法变成了数据生成器,val_loss就高得吓人。所以目前正在研究到底是哪里的细微的区别导致了这样的结果。
关于kaggle kernel评论的收获:
1.看评论说应该将sigmoid换为softmax
2.全连接太多可能会导致过拟合(在这个例子里面)
3.有人和我遇到了类似的问题
2019-03-06
不管怎么说,我是严重过拟合了。检查了很多次,决定换个模型试试。
改了下原来的模型,过拟合的情况小了点。val_loss降了不少。不过train_loss还是低得可怕,哭了。我决定再删一层!
然而清醒地意识到,删网络并不能改善val_loss的情况。于是我决定检查代码。主要是自定义生成器这里我是自己写的,可能还是有问题。不检查不知道,一检查吓一跳。
我的数据生成器某个地方写错了,导致实际上只有一张图片在训练。难怪我的train_loss降得那么可怕。后来改了之后,val_loss还是居高不下。于是我有检查了一次。= =原来还是那句代码,放错了地方,导致实际上只有一个batch的图片在训练。后来决定检查数据生成器的时候,一定要先输出给自己看看,保证数据是按照自己的要求遍历的。
在这里卡了这么久,也算是一个惨痛的教训了。
train loss 狂降不止!val loss居高不下!原来是菜鸡生成器搞鬼!
搜到的关于过拟合的讲解。https://www.sohu.com/a/162003640_465944
2019-03-06
但是又出现了一个新问题,val loss竟然比train loss还低。这又是怎么一回事?
2019-3-14
前段时间发烧卧床不起了,在寝室整整烧了一天半,躺了一天半。今天终于又开始研究这个问题了。
重新过了一遍之前写的代码,终于知道了为什么val loss比train loss还低了。
因为我的训练集的数据已经包括了验证集的数据。
为什么会犯这种低级错误呢?
原因在于我把训练集所有的数据都放在了train_csv里面,然后又从中分离出了val_csv,剩下的命名成了 re_train_csv。
好家伙,命名完了之后我就把re_train_csv给忘记了。训练的时候一直用的都是train_csv,也就是说,训练的时候,我把所有的数据都拿去训练了,那当然是验证集的loss比训练集的loss低啦。
2019-3-14
基本流程已经熟悉了。现在我准备参考一位kaggler公开的代码进行训练。
参考代码链接:https://github.com/pengpaiSH/Kaggle_NCFM
总结一下这位大佬的思路,以便今后能进行一个参考。
1.模型采用inception_V3
2.做测试时数据增强
3.五折交叉验证
持续更新---