作者NDEJG (NDE)
看板DataScience
标题[问题] autoencoder train不起来
时间Wed Aug 24 05:57:08 2022
作业系统: win10
问题类别: DL
使用工具: Keras in TF2
问题内容:
尝试建一个autoencoder 来reconstruct输入的影像,结果ouput 出来几乎都是0,224个
channels 里只有两个不是全0的影像,那两个不是全0的影像也完全不像输入的影像,就
两个亮点。把每一层输出抓出来看,发现有几层的feature map全部都是0,其他层约有55
%的 feature map全部都是0。google不太到类似经验,希望来板上取得灵感Q_Q
model训练好後希望看每层feature map长怎样,尤其是想看哪些channel没什麽贡献,所
以想保留影像的shape。
input:
从大张的影像随机切36x36x224的植物影像,其中224个channels 都是从0-1,代表反射率
,大部分的pixel 值小於0.5,因为想保留物理意义且全部的值都在0-1之间所以没额外做
normalization。validation 跟testing 时用固定的影像。
model1:
eocoder decoder各三层,encoder三层都用keras的conv2D,filter数量都是224,kernel
size都是3,stride都是1,activation function 都是relu,padding=same。decoder就
把conv2Dtranspose 回来。
loss function 是mse
model2:
一样架构,但把activation function 换成leakyrelu,最後一层的activation function
换成tanh(我看李宏毅老师的作业这样改我就无脑跟着改)
model3:
一样架构,鉴於model2也失败,觉得leakyrelu可能没差,於是改回relu。仔细想了一下t
anh的ouput是-1到1,但影像都是0-1,所以最後一层改用sigmoid,还是失败。
训练参数:
learning rate 0.001, 0.01, 0.05, 0.1(试了四组都train不起来)
optimization Adam
epoch 3以後每个epoch的validation loss都一样,代表model大概没在动。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 98.223.102.101 (美国)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DataScience/M.1661291830.A.5D3.html
1F:→ yoyololicon: loss curve贴一下 08/24 15:34
2F:→ yoyololicon: 你stride都1这样没降维吧 autoencode的目的是? 08/24 15:38
我想看有没有channel 会被autoencoder drop掉,然後想看model对不同波段做了什麽事
3F:→ yoyololicon: 虽然你遇到的问题可能跟架构也没什麽关系08/24 15:39
4F:→ yoyololicon: 应该写错code(?08/24 15:39
code是公司ml工程师写的,我改了一点以後两个一起检查过了应该没问题。
5F:→ chang1248w: 怎麽样把一张图片切出36*36*224的...东西08/24 18:20
6F:→ chang1248w: 我参不透08/24 18:20
我们的相机是特殊的相机,本身就有224个波段,我只是切个36x36pixel下来
7F:→ chang1248w: 你贴个preprocessing 和model implement 的code好不08/24 18:21
8F:→ chang1248w: 有时候实现出来不完全是你想的那样08/24 18:21
---
因为资料是美国管制资料所以我不能拍照也不能截图QQ
※ 编辑: NDEJG (98.223.102.101 美国), 08/24/2022 21:51:18
9F:→ chang1248w: 大致了解08/24 23:00
10F:→ chang1248w: autoencoder会train成什麽形状,取决於你给他的训练08/24 23:05
11F:→ chang1248w: 任务,我们通常会移植其中的一部分来做其他的事情,08/24 23:05
12F:→ chang1248w: 诸如分类和生成图像08/24 23:05
13F:→ chang1248w: code看也不好说什麽了08/24 23:11
14F:→ chang1248w: 你先用原本会变瘦的版本试试吧08/24 23:44
更新:
把最後一层activation function 改成linear就有不错成果了,另外我误会keras conv2D
做的事了,即使filter size跟channels 一样多每个filter也还是从多个channel去取fea
ture ,不过从每层feature看来有一部分的feature map还是全部都0,filter数量应该够
,有错请指正
※ 编辑: NDEJG (128.210.107.88 美国), 08/25/2022 00:53:04
15F:→ chang1248w: 全零大概就是被relu吸收掉的那些样本 08/25 09:42
16F:→ chang1248w: 你想找的应该是depthwise conv 08/25 09:43
17F:→ chang1248w: 没有bottle neck structure 那你的autoencoder 最佳 08/25 09:45
18F:→ chang1248w: 解自然就是identity transform 08/25 09:45