Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

tf.compat.v1.train.Optimizer

Lihat sumber di GitHub

kelas dasar untuk pengoptimalan.

Kelas ini mendefinisikan API untuk menambahkan Ops untuk melatih model. Anda tidak pernah menggunakan kelas ini secara langsung, tapi satu bukannya instantiate dari subclass seperti GradientDescentOptimizer , AdagradOptimizer , atau MomentumOptimizer .

Pemakaian

 # Create an optimizer with the desired parameters.
opt = GradientDescentOptimizer(learning_rate=0.1)
# Add Ops to the graph to minimize a cost by updating a list of variables.
# "cost" is a Tensor, and the list of variables contains tf.Variable
# objects.
opt_op = opt.minimize(cost, var_list=<list of variables>)
 

Dalam program pelatihan Anda hanya akan harus menjalankan kembali Op.

 # Execute opt_op to do one step of training:
opt_op.run()
 

Pengolahan gradien sebelum menerapkannya.

Memanggil minimize() membutuhkan perawatan dari kedua komputasi gradien dan menerapkannya ke variabel. Jika Anda ingin memproses gradien sebelum menerapkannya Anda malah dapat menggunakan optimizer dalam tiga langkah:

  1. Menghitung gradien dengan compute_gradients() .
  2. Memproses gradien yang Anda inginkan.
  3. Terapkan gradien diproses dengan apply_gradients() .

Contoh:

 # Create an optimizer.
opt = GradientDescentOptimizer(learning_rate=0.1)

# Compute the gradients for a list of variables.
grads_and_vars = opt.compute_gradients(loss, <list of variables>)

# grads_and_vars is a list of tuples (gradient, variable).  Do whatever you
# need to the 'gradient' part, for example cap them, etc.
capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars]

# Ask the optimizer to apply the capped gradients.
opt.apply_gradients(capped_grads_and_vars)
 

gating Gradien

Kedua minimize() dan compute_gradients() menerima gate_gradients argumen bahwa kontrol derajat paralelisme selama penerapan gradien.

Nilai yang mungkin adalah: GATE_NONE , GATE_OP , dan GATE_GRAPH .

GATE_NONE : Hitung dan menerapkan gradien secara paralel. Hal ini memberikan paralelisme maksimum dalam pelaksanaan, pada biaya beberapa non-reproduktifitas dalam hasil. Misalnya dua gradien dari matmul bergantung pada nilai masukan: Dengan GATE_NONE salah satu gradien dapat diterapkan ke salah satu masukan sebelum gradien lainnya dihitung menghasilkan hasil non-direproduksi.

GATE_OP : Untuk setiap Op, pastikan semua gradien dihitung sebelum mereka digunakan. Hal ini untuk mencegah kondisi balapan untuk Ops yang menghasilkan gradien untuk beberapa masukan di mana gradien tergantung pada input.

GATE_GRAPH : Pastikan semua gradien untuk semua variabel dihitung sebelum salah satu dari mereka digunakan. Hal ini memberikan sedikit paralelisme tetapi dapat berguna jika Anda ingin memproses semua gradien sebelum menerapkan salah satu dari mereka.

slot

Beberapa subclass optimizer, seperti MomentumOptimizer dan AdagradOptimizer mengalokasikan dan mengelola variabel tambahan yang terkait dengan variabel untuk melatih. Ini disebut Slot. Slot memiliki nama dan Anda dapat meminta optimizer untuk nama-nama slot yang digunakannya. Setelah Anda memiliki nama slot yang Anda dapat meminta optimizer untuk variabel itu dibuat untuk memegang nilai Slot.

Hal ini dapat berguna jika Anda ingin log debug algoritma pelatihan, statistik laporan tentang slot, dll

use_locking Bool. Jika Benar menerapkan penggunaan mengunci untuk mencegah update bersamaan dengan variabel.
name Sebuah string yang tidak kosong. Nama digunakan untuk akumulator diciptakan untuk optimizer.

ValueError Jika namanya kelainan bentuk.

metode

apply_gradients

Lihat sumber

Terapkan gradien untuk variabel.

Ini adalah bagian kedua dari minimize() . Ini mengembalikan sebuah Operation yang berlaku gradien.

args
grads_and_vars Daftar (gradien, variabel) pasang sebagai dikembalikan oleh compute_gradients() .
global_step Opsional Variable untuk kenaikan per satu setelah variabel telah diperbarui.
name nama opsional untuk operasi kembali. Default ke nama diteruskan ke Optimizer konstruktor.

Pengembalian
Sebuah Operation yang menerapkan gradien tertentu. Jika global_step tidak ada, operasi yang juga increment global_step .

kenaikan gaji
TypeError Jika grads_and_vars adalah kelainan bentuk.
ValueError Jika tidak ada variabel memiliki gradien.
RuntimeError Jika Anda harus menggunakan _distributed_apply() sebagai gantinya.

compute_gradients

Lihat sumber

Hitung gradien dari loss untuk variabel-variabel di var_list .

Ini adalah bagian pertama dari minimize() . Ia mengembalikan daftar (gradien, variabel) pasang di mana "gradien" adalah gradien untuk "variabel". Perhatikan bahwa "gradien" bisa menjadi Tensor , sebuah IndexedSlices , atau None jika tidak ada gradien untuk variabel diberikan.

args
loss Sebuah Tensor mengandung nilai untuk meminimalkan atau mengambil callable tanpa argumen yang mengembalikan nilai untuk meminimalkan. Ketika eksekusi ingin diaktifkan itu harus menjadi callable.
var_list Daftar opsional atau tuple dari tf.Variable untuk memperbarui untuk meminimalkan loss . Default ke daftar variabel yang dikumpulkan dalam grafik di bawah kunci GraphKeys.TRAINABLE_VARIABLES .
gate_gradients Cara gerbang perhitungan gradien. Bisa GATE_NONE , GATE_OP , atau GATE_GRAPH .
aggregation_method Menentukan metode yang digunakan untuk menggabungkan istilah gradien. Nilai yang valid didefinisikan di kelas AggregationMethod .
colocate_gradients_with_ops Jika Benar, coba colocating gradien dengan yang sesuai op.
grad_loss Pilihan. Sebuah Tensor memegang gradien dihitung untuk loss .

Pengembalian
Daftar (gradien, variabel) pasang. Variabel selalu hadir, tapi gradien bisa None .

raise
TypeError Jika var_list mengandung apa pun dari Variable obyek.
ValueError Jika beberapa argumen yang tidak valid.
RuntimeError Jika disebut dengan eksekusi bersemangat diaktifkan dan loss tidak callable.

Kompatibilitas bersemangat

Ketika eksekusi bersemangat diaktifkan, gate_gradients , aggregation_method , dan colocate_gradients_with_ops diabaikan.

get_name

Lihat sumber

get_slot

Lihat sumber

Kembali slot bernama name dibuat untuk var oleh Optimizer.

Beberapa Optimizer subclass menggunakan variabel tambahan. Misalnya Momentum dan Adagrad penggunaan variabel untuk update menumpuk. Metode ini memberikan akses ke Variable obyek jika untuk beberapa alasan Anda membutuhkan mereka.

Gunakan get_slot_names() untuk mendapatkan daftar nama slot yang diciptakan oleh Optimizer .

args
var Sebuah variabel dilewatkan ke minimize() atau apply_gradients() .
name Sebuah benang.

Pengembalian
The Variable untuk slot jika dibuat, None sebaliknya.

get_slot_names

Lihat sumber

Kembali daftar nama-nama slot diciptakan oleh Optimizer .

Lihat get_slot() .