[英]For LSTM variables I get error "tensorflow:Gradients do not exist for variables"
嗨,我有一個雙向 LSTM 層:
class BiDirLSTMInput(Layer):
def __init__(self):
self.bidir_lstm = Bidirectional(
LSTM(32, return_sequences=True,return_state=True)
)
def call(self, input):
o, h1,h2, c1,c2 = self.bidir_lstm(input)
return [h1,h2]
如您所見,我只是從 LSTM(而不是單元狀態)中使用隱藏的 state
這就是原因嗎,我是否收到以下警告:
警告:tensorflow:(后向層)的變量不存在梯度:
忽略這一點聽起來不合邏輯。 我該如何處理這個錯誤?
好的,我終於能夠解決這個警告。
找出問題所在有點棘手。
所以基本上發生的事情是:
def call(self, input):
o, h1,h2, c1,c2 = self.bidir_lstm(input)
return (h1,h2)
如您所見,我只是在使用隱藏的 state 而不是單元格 state。
這就是您看到梯度警告的原因。
解決方法是:
你只消費 output state
如果你想消耗隱藏的 state 那么也消耗單元格 state。
您可以通過多種方式做到這一點:
a) h_and_c = 連接(h,c)
b) h_and_c_avg = avg(h,c)
c) h_and_c_sum = 總和(h,c)
注意我已經用Tensorflow Keras 雙向 LSTM測試了這個(我沒有只用 LSTM 檢查過)
我想是的。 您能否也嘗試使用hidden states
,然后觀察您是否收到相同的警告?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.