[問題] keras custom layer multiple output請教

看板DataScience作者 (不是clairehuei 是桂)時間6年前 (2018/07/28 13:58), 6年前編輯推噓3(306)
留言9則, 3人參與, 6年前最新討論串1/1
大家好, 最近在嘗試寫一個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://www.ptt.cc/bbs/DataScience/M.1532757530.A.AAA.html

07/28 15:54, 6年前 , 1F
你的custom layer直接呼叫get_weights不行嗎@@?
07/28 15:54, 1F

07/28 16:02, 6年前 , 2F
可是我需要的是layer的outputs 不是weight @@
07/28 16:02, 2F
剛才異想天開試了一個方法, 我想說,既然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

07/28 16:40, 6年前 , 3F
因為我猜問題應該在回傳的weight沒連到任意的output
07/28 16:40, 3F

07/28 16:40, 6年前 , 4F
因此存model時會有問題 所以我是指你call的weights就
07/28 16:40, 4F

07/28 16:40, 6年前 , 5F
用get weights來拿然後回傳計算完的output就好 不過
07/28 16:40, 5F

07/28 16:40, 6年前 , 6F
你說要output就好那不就可拿掉嗎 是不是我搞錯什麼QQ
07/28 16:40, 6F

07/29 04:28, 6年前 , 7F
留weight就好 model直接重建
07/29 04:28, 7F

07/29 21:58, 6年前 , 8F
留weights, model重建, 再載入weights 的確可行@.@
07/29 21:58, 8F

07/29 21:58, 6年前 , 9F
感謝各位大大指點 <(_"_)>
07/29 21:58, 9F
文章代碼(AID): #1RN0OQgg (DataScience)
文章代碼(AID): #1RN0OQgg (DataScience)