Dalam model saya, saya menggunakan tf.keras.losses.MSE untuk menghitung mean squared error dari output BATCH_SIZE x 256 x 256 x 3 dan saya BATCH_SIZE x 256 x 256 x 3 masukan.

Keluaran dari fungsi ini tampaknya (Tidak ada,256.256).

Saya kemudian menggunakan tf.GradientTape.gradients, dengan output MSE sebagai atribut "target". Dalam dokumentasi, dikatakan bahwa atribut ini dapat berupa tensor.

Pemahaman saya adalah bahwa kerugian adalah bilangan skalar yang dibedakan terhadap masing-masing bobot selama propagasi mundur.

Oleh karena itu, pertanyaan saya adalah: Apa yang terjadi ketika tensor multidimensi dilewatkan ke fungsi gradien? Apakah jumlah semua elemen dalam tensor sederhana dihitung?

Saya menanyakan ini karena model saya tidak berlatih saat ini, dengan pembacaan kerugian pada 1,0 di setiap zaman. Asumsi saya adalah bahwa saya tidak menghitung gradien dengan benar, karena semua gradien saya terbaca 0,0 untuk setiap bobot.

0
magmacollaris 4 April 2021, 17:33

1 menjawab

Jawaban Terbaik
import tensorflow as tf
x = tf.Variable([3.0, 2.0])
with tf.GradientTape() as g:
  g.watch(x)
  y = x * x
dy_dx = g.gradient(y, x)
print(dy_dx)
print(y)

Result: 
tf.Tensor([6. 4.], shape=(2,), dtype=float32)
tf.Tensor([9. 4.], shape=(2,), dtype=float32)

Seperti yang dijelaskan pada gambar di atas, tf.GradientTape.gradient cukup menghitung gradien dy/dx. Dalam kasus Anda dengan banyak variabel, tf tampaknya menghitung turunan dari tensor yang sesuai alih-alih menjumlahkannya secara otomatis.

0
krenerd 4 April 2021, 23:10