簡體   English   中英

Tensorflow 使用 GradientTape 時矩陣大小不兼容

[英]Tensorflow incompatible matrix size when using GradientTape

我正在嘗試運行以前在 tensorflow 2.2.0 上用於蘋果硅的 2.4.0-rc0 版本的代碼(使用 python 3.8),但它現在生成以下關於矩陣尺寸的錯誤:

tensorflow.python.framework.errors_impl.InvalidArgumentError: GetOutputShape: Matrix size-incompatible: In[0]: [256,4], In[1]: [4,400]

我正在使用嵌套梯度磁帶來計算我的 MLP model wrt 輸入(構成損失的一部分)的梯度,然后我計算可訓練變量的損失梯度,如下所示:

    def get_grad_and_loss(self, x, y):
        with tf.GradientTape(persistent=True) as gl_tape:
            gl_tape.watch(x)

            with tf.GradientTape(persistent=True) as l_tape:
                l_tape.watch(x)
                y_pred = self.call(x)

            grad_mat = l_tape.gradient(y_pred, x)
            loss = tf.reduce_mean(tf.math.square(y_pred - y[:, tf.newaxis])) + tf.reduce_mean(tf.maximum(0, -1 * (grad_mat[:, 0])))

        g = gl_tape.gradient(loss, self.trainable_weights)

        return g, loss

換句話說,我正在計算 MSE 並試圖強制梯度的符號為正(作為軟約束)。 我已經閱讀了梯度磁帶上的文檔,據我了解,設置persistent=True應該可以讓我自由地重新計算梯度。 作為旁注,如果我省略嵌套漸變帶並簡單地使用 MSE 指標,我的代碼可以正常工作,所以我認為問題不在於代碼中的其他任何地方。 任何指針將不勝感激,在此先感謝:)

您似乎對哪個梯度磁帶監視哪些變量感到困惑。 我建議確保磁帶監視不同的變量。 目前他們都在看x 您很可能需要輸入gl_tape.watch(self.trainable_weights) 有兩個漸變膠帶一起工作的例子。 去看一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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