看板 DataScience 關於我們 聯絡資訊
大家好, 最近在嘗試寫一個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
goldflower: 你的custom layer直接呼叫get_weights不行嗎@@? 07/28 15:54
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
goldflower: 因為我猜問題應該在回傳的weight沒連到任意的output 07/28 16:40
goldflower: 因此存model時會有問題 所以我是指你call的weights就 07/28 16:40
goldflower: 用get weights來拿然後回傳計算完的output就好 不過 07/28 16:40
goldflower: 你說要output就好那不就可拿掉嗎 是不是我搞錯什麼QQ 07/28 16:40
germun: 留weight就好 model直接重建 07/29 04:28
clairehuei: 留weights, model重建, 再載入weights 的確可行@.@ 07/29 21:58
clairehuei: 感謝各位大大指點 <(_"_)> 07/29 21:58