簡體   English   中英

對於 LSTM 變量,我收到錯誤“tensorflow:變量不存在梯度”

[英]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:(后向層)的變量不存在梯度:

  1. lstm_cell_2/內核:0',
  2. lstm_cell_2/recurrent_kernel:0'
  3. lstm_cell_2/偏差:0'

忽略這一點聽起來不合邏輯。 我該如何處理這個錯誤?

好的,我終於能夠解決這個警告。

找出問題所在有點棘手。

所以基本上發生的事情是:

def call(self, input):
    o, h1,h2, c1,c2 = self.bidir_lstm(input)
    return (h1,h2)

如您所見,我只是在使用隱藏的 state 而不是單元格 state。

這就是您看到梯度警告的原因。

解決方法是:

  1. 你只消費 output state

  2. 如果你想消耗隱藏的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM