作者polie4523 (冷冷)
看板DataScience
标题[问题] 关於CNN学习到的特徵问题
时间Sun May 16 01:04:05 2021
作业系统:(ex:mac,win10,win8,win7,linux,etc...)
Linux
问题类别:(ex:ML,SVM,RL,DL,RNN,CNN,NLP,BD,Vis,etc...)
CNN
使用工具:(ex:python,Java,C++,tensorflow,keras,MATLAB,etc...)
Pytorch
问题内容:s
我用pytorch的pretrained模型inception v3
训练三个类别,每个类别资料量都是训练108验证27
用k=5做kfold後平均训练accuracy有95%验证accuracy有90%,单次最高(同一个epoch)是训练95%验证96%
我的问题是,当我用CAM(heatmap)检查模型是否有学到真正的特徵时,发现他只是以不相关的地方当作特徵,我在想会造成这样的原因是什麽。
我对cnn的理解是前面卷积层在学习特徵,而後面的全连接层把学习到的特徵分类,而对於模型来说只要参数在error surface最低的地方就会是学到的特徵,那我现在这种情况准确率很高代表全连接层的参数能够让error最小吧
我想让卷积层的特徵能够在对的位置上,如果我把全连接层数加深的话对特徵的学习是不是没有用?因为那只是让分类更正确而已,反而会因为参数变多而overfitting。
想请问各位板友我这样的想法有没有错,实验後是发现没有改善@@反而准确率更低 目前唯一想到的做法就是增加资料量,或是请版友建议其他方法,谢谢!
-----
Sent from JPTT on my iPhone
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 182.234.194.110 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DataScience/M.1621098247.A.D98.html
1F:推 supremexiii: 直觉是想调整filter大小,不过好像行不通 05/16 20:28
我曾经有训练到可以抓到每个类别,那时只有资料数量用较少, 但是之後都train不出来一样的结果,感觉也是要看运气@@
2F:→ wtchen: 调整filter大小+dropout或搭配residual connection 05/16 20:39
3F:→ supremexiii: 对资料upscale或downscale不知道行不行 05/16 20:52
4F:→ polie4523: 我把输入大小从1024改为299并且增加训练照片到各类别25 05/17 17:26
5F:→ polie4523: 2张,训练有到100趴,验证93.8趴,看cam发现只有单一类 05/17 17:26
6F:→ polie4523: 别有抓到真特徵而且该类别准确率比较高,感觉好像把没 05/17 17:26
7F:→ polie4523: 抓到的特徵的类别增加照片就行? 05/17 17:26
8F:→ polie4523: 之後会试试调整filter大小,现在在学怎麽改XD 05/17 17:28
※ 编辑: polie4523 (140.115.200.74 台湾), 05/17/2021 17:33:14
9F:→ followwar: 先想想你的CAM作法真的能看出CNN做了什麽吗? (笑) 05/18 22:59
我的cam做法是将经过gap後对应某类别的全连接层权重个别乘上最後的特徵图再相加,对它的认知就是查看哪个部分对最後输出的影响大。小弟我才疏学浅想了一个下午还是没办法理解f大意思@@但我可以接受不要全盘接受cam的说法,只是不知道该怎麽直观的解释,感觉是因为最後的特徵图不代表整个cnn学到的特徵?
10F:→ followwar: 不要太一厢情愿的觉得CAM一定对 05/18 23:00
11F:→ yoyololicon: 意见同上 然後你资料太少维度太高 05/18 23:21
12F:→ yoyololicon: 先全部downsample到64x64甚至32x32再试试 05/18 23:22
※ 编辑: polie4523 (112.78.74.199 台湾), 05/20/2021 00:27:49
13F:→ followwar: 你可以参考一下 Grad-CAM Score-CAM 之类的文章 05/21 14:22