作者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/m.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