[英]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.