Saya mengikuti tutorial mnist Tensorflow ( https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist_softmax.py ).
Tutorial menggunakan tf.train.Optimizer.minimize
(khusus tf.train.GradientDescentOptimizer
). Saya tidak melihat argumen yang dilewatkan di mana pun untuk menentukan gradien.
Apakah Tensor flow menggunakan diferensiasi numerik secara default?
Apakah ada cara untuk lulus dalam gradien seperti yang Anda bisa scipy.optimize.minimize
?
sumber
Ini menggunakan diferensiasi otomatis. Di mana ia menggunakan aturan rantai dan mundur dalam grafik yang menetapkan gradien.
Katakanlah kita memiliki tensor C tensor C ini dibuat setelah serangkaian operasi Katakanlah dengan menambahkan, mengalikan, melalui beberapa nonlinier, dll.
Jadi jika C ini tergantung pada beberapa set tensor yang disebut Xk, Kita perlu mendapatkan gradien
Tensorflow selalu melacak jalur operasi. Maksud saya perilaku berurutan dari node dan bagaimana data mengalir di antara mereka. Itu dilakukan oleh grafik
Jika kita perlu mendapatkan turunan dari input X wrt biaya apa yang akan pertama kali dilakukan adalah memuat path dari input-x ke biaya dengan memperluas grafik.
Kemudian mulai dalam urutan sungai. Kemudian mendistribusikan gradien dengan aturan rantai. (Sama seperti backpropagation)
Bagaimanapun jika Anda membaca kode sumber milik tf.gradients () Anda dapat menemukan bahwa tensorflow telah melakukan bagian distribusi gradien ini dengan cara yang baik.
Ketika melakukan backtracking jika berinteraksi dengan grafik, pada kata sandinya TF akan bertemu dengan node yang berbeda. Di dalam node ini terdapat operasi yang kita sebut (ops) matmal, softmax, relu, batch_normalization dll. Jadi yang kita lakukan adalah secara otomatis memuat ops ini ke dalam grafik
Node baru ini merupakan turunan parsial dari operasi. get_gradient ()
Mari kita bicara sedikit tentang node yang baru ditambahkan ini
Di dalam simpul-simpul ini kami menambahkan 2 hal 1. Derivatif, kami menghitung dengan lebih mudah) 2.Juga input ke opp yang sesuai pada forward pass
Jadi dengan aturan rantai kita bisa menghitung
Jadi ini sangat mirip dengan API backword
Jadi tensorflow selalu memikirkan urutan grafik untuk melakukan diferensiasi otomatis
Jadi seperti yang kita tahu kita perlu meneruskan variabel untuk menghitung gradien maka kita perlu menyimpan nilai intermidiate juga dalam tensor ini dapat mengurangi memori Untuk banyak operasi tf tahu cara menghitung gradien dan mendistribusikannya.
sumber