嗨,我有一个双向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的隐藏状态(而不是单元状态)
是这个原因,我收到以下警告:
警告:tensorflow :(后退层)变量的渐变不存在:
忽略这听起来不合逻辑。我该如何处理该错误?
答案 0 :(得分:1)
好的,我终于可以解决此警告。
要找出问题所在,这有点棘手。
所以基本上发生了什么事
def call(self, input):
o, h1,h2, c1,c2 = self.bidir_lstm(input)
return (h1,h2)
如您所见,我只是使用隐藏状态而不是单元状态。
这就是您看到渐变警告的原因。
解决方案是:
您只消耗输出状态
如果您想使用隐藏状态,那么也要使用单元格状态。
这可以通过多种方式完成:
a)h_and_c = concat(h,c)
b)h_and_c_avg = avg(h,c)
c)h_and_c_sum = sum(h,c)
注意:我已经使用 Tensorflow Keras双向LSTM (我还没有检查过LSTM)对此进行过测试
答案 1 :(得分:0)
我认为是的。您是否也可以尝试使用hidden states
,然后观察是否收到相同的警告?