作者clairehuei (不是clairehuei 是桂)
看板DataScience
標題[問題] keras custom layer multiple output請教
時間Sat Jul 28 13:58:48 2018
大家好, 最近在嘗試寫一個keras的attention layer
為了能夠視覺化, 所以我把 def call (self, x, mask=None):
的 return 值,改為list 內容類似 [outputs, 權重] 這樣
以上在train的時候,都很順利, 視覺化效果也能夠透過權重來呈現
但是, 當我把train好的model save下來, 然後 再次 load_model()時
會報一個神奇的錯誤:
File
"C:\Users\Allen\Anaconda3\envs\tensorflow\lib\site-packages\keras\engine\topology.py",
line 719, in _add_inbound_node
output_tensors[i]._keras_shape = output_shapes[i]
IndexError: list index out of range
我在load_model的時候,有加入custom_objects的參數設定,把我的attention layer引入
使用的keras 版本為 2.1.5
python版本為 3.5
想請教版上大家有沒有遇過類似的情形,有相關的解法嗎QQ?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.131.58
※ 文章網址: https://webptt.com/m.aspx?n=bbs/DataScience/M.1532757530.A.AAA.html
1F:推 goldflower: 你的custom layer直接呼叫get_weights不行嗎@@? 07/28 15:54
2F:→ clairehuei: 可是我需要的是layer的outputs 不是weight @@ 07/28 16:02
剛才異想天開試了一個方法, 我想說,既然load_model之後 他只會丟出一個output
那我就在call() 裡面,自己把 output 跟 權重的array append起來 再return
(之後再自己切割取要的部分)
因為過程當中 我有用到reshape, 實驗結果更慘, 一樣在train的時候都正常
load_model() 的時候, 又報錯, 說 call() 裡面的 'output'物件 是tensor
沒有 .reshape() 方法 囧rz...
※ 編輯: clairehuei (220.130.131.58), 07/28/2018 16:09:09
3F:推 goldflower: 因為我猜問題應該在回傳的weight沒連到任意的output 07/28 16:40
4F:→ goldflower: 因此存model時會有問題 所以我是指你call的weights就 07/28 16:40
5F:→ goldflower: 用get weights來拿然後回傳計算完的output就好 不過 07/28 16:40
6F:→ goldflower: 你說要output就好那不就可拿掉嗎 是不是我搞錯什麼QQ 07/28 16:40
7F:推 germun: 留weight就好 model直接重建 07/29 04:28
8F:→ clairehuei: 留weights, model重建, 再載入weights 的確可行@.@ 07/29 21:58
9F:→ clairehuei: 感謝各位大大指點 <(_"_)> 07/29 21:58