Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

tf.keras.optimizers.Optimizer

TensorFlow 1 versi Lihat sumber di GitHub

kelas dasar untuk pengoptimalan Keras.

Anda tidak harus menggunakan kelas ini secara langsung, melainkan instantiate salah satu subclass nya seperti tf.keras.optimizers.SGD , tf.keras.optimizers.Adam , dll

Pemakaian

 # Create an optimizer with the desired parameters.
opt = tf.keras.optimizers.SGD(learning_rate=0.1)
# `loss` is a callable that takes no argument and returns the value
# to minimize.
loss = lambda: 3 * var1 * var1 + 2 * var2 * var2
# In graph mode, returns op that minimizes the loss by updating the listed
# variables.
opt_op = opt.minimize(loss, var_list=[var1, var2])
opt_op.run()
# In eager mode, simply call minimize to update the list of variables.
opt.minimize(loss, var_list=[var1, var2])
 

Penggunaan dalam loop pelatihan kustom

Dalam model Keras, kadang-kadang variabel diciptakan ketika model pertama disebut, bukan waktu konstruksi. Contohnya termasuk 1) model berurutan tanpa bentuk masukan pra-ditentukan, atau 2) model subclassed. Lulus var_list sebagai callable dalam kasus ini.

Contoh:

 opt = tf.keras.optimizers.SGD(learning_rate=0.1)
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(num_hidden, activation='relu'))
model.add(tf.keras.layers.Dense(num_classes, activation='sigmoid'))
loss_fn = lambda: tf.keras.losses.mse(model(input), output)
var_list_fn = lambda: model.trainable_weights
for input, output in data:
  opt.minimize(loss_fn, var_list_fn)
 

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 tf.GradientTape .
  2. Memproses gradien yang Anda inginkan.
  3. Terapkan gradien diproses dengan apply_gradients() .

Contoh:

 # Create an optimizer.
opt = tf.keras.optimizers.SGD(learning_rate=0.1)

# Compute the gradients for a list of variables.
with tf.GradientTape() as tape:
  loss = <call_loss_function>
vars = <list_of_variables>
grads = tape.gradient(loss, vars)

# Process the gradients, for example cap them, etc.
# capped_grads = [MyCapper(g) for g in grads]
processed_grads = [process_gradient(g) for g in grads]

# Ask the optimizer to apply the processed gradients.
opt.apply_gradients(zip(processed_grads, var_list))
 

Gunakan dengan tf.distribute.Strategy

Kelas optimizer ini tf.distribute.Strategy sadar, yang berarti secara otomatis merangkum gradien di semua replika. Untuk gradien rata-rata, Anda membagi kerugian Anda dengan ukuran batch yang global, yang dilakukan secara otomatis jika Anda menggunakan tf.keras built-in pelatihan atau evaluasi loop. Lihat reduction argumen kerugian Anda yang harus ditetapkan untuk tf.keras.losses.Reduction.SUM_OVER_BATCH_SIZE untuk averaging atau tf.keras.losses.Reduction.SUM untuk tidak.

Gradien agregat sendiri, panggilan apply_gradients dengan experimental_aggregate_gradients diatur ke False. Ini berguna jika Anda perlu proses gradien agregat.

Jika Anda tidak menggunakan ini dan Anda ingin gradien rata-rata, Anda harus menggunakan tf.math.reduce_sum untuk menambah per-contoh kerugian dan kemudian bagi dengan ukuran bets global. Perhatikan bahwa bila menggunakan tf.distribute.Strategy , komponen pertama dari bentuk tensor adalah ukuran batch yang replika-lokal, yang off dengan faktor sama dengan jumlah replika yang digunakan untuk menghitung satu langkah. Akibatnya, menggunakan tf.math.reduce_mean akan memberikan jawaban yang salah, sehingga gradien yang bisa berkali-kali terlalu besar.

Kendala variabel

Semua Keras pengoptimalan menghormati kendala variabel. Jika fungsi kendala diteruskan ke variabel apapun, kendala akan diterapkan ke variabel setelah gradien telah diterapkan ke variabel. Penting: Jika gradien adalah tensor jarang, variabel kendala tidak didukung.

Thread Kompatibilitas

Seluruh optimizer saat benang yang kompatibel, tidak thread-safe. kebutuhan pengguna untuk melakukan sinkronisasi jika diperlukan.

slot

Banyak subclass optimizer, seperti Adam dan Adagrad 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

Hyperparameters

Ini adalah argumen dilewatkan ke konstruktor optimizer subclass (yang __init__ metode), dan kemudian diteruskan ke self._set_hyper() . Mereka dapat berupa nilai-nilai biasa Python (seperti 1.0), tensor, atau callables. Jika mereka callable, callable akan disebut selama apply_gradients() untuk mendapatkan nilai untuk parameter hiper.

Hyperparameters bisa ditimpa melalui kode pengguna:

Contoh:

 # Create an optimizer with the desired parameters.
opt = tf.keras.optimizers.SGD(learning_rate=0.1)
# `loss` is a callable that takes no argument and returns the value
# to minimize.
loss = lambda: 3 * var1 + 2 * var2
# In eager mode, simply call minimize to update the list of variables.
opt.minimize(loss, var_list=[var1, var2])
# update learning rate
opt.learning_rate = 0.05
opt.minimize(loss, var_list=[var1, var2])
 

Tingkat pembelajaran callable

Optimizer menerima tingkat pembelajaran callable dalam dua cara. Cara pertama adalah melalui built-in atau disesuaikan tf.keras.optimizers.schedules.LearningRateSchedule . Jadwal ini akan disebut pada setiap iterasi dengan schedule(iteration) , sebuah tf.Variable dimiliki oleh optimizer.

Contoh:

var = tf.Variable(np.random.random(size=(1,)))
learning_rate = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=.01, decay_steps=20, decay_rate=.1)
opt = tf.keras.optimizers.SGD(learning_rate=learning_rate)
loss = lambda: 3 * var
opt.minimize(loss, var_list=[var])
<tf.Variable...

Cara kedua adalah melalui fungsi callable yang tidak menerima argumen.

Contoh:

var = tf.Variable(np.random.random(size=(1,)))
def lr_callable():
  return .1
opt = tf.keras.optimizers.SGD(learning_rate=lr_callable)
loss = lambda: 3 * var
opt.minimize(loss, var_list=[var])
<tf.Variable...

Membuat optimizer kustom

Jika Anda berniat untuk membuat algoritma optimasi Anda sendiri, hanya mewarisi dari kelas ini dan menimpa metode berikut:

  • _resource_apply_dense (variabel pembaruan diberikan gradien tensor padat)
  • _resource_apply_sparse (variabel pembaruan diberikan tensor gradien jarang)
  • _create_slots (jika algoritma optimizer Anda memerlukan variabel tambahan)
  • get_config (serialisasi dari optimizer, mencakup semua parameter hiper)

name Sebuah string yang tidak kosong. Nama digunakan untuk akumulator diciptakan untuk optimizer.
**kwargs argumen kata kunci. Boleh { clipnorm , clipvalue , lr , decay }. clipnorm adalah klip gradien dengan norma; clipvalue adalah klip gradien dengan nilai, decay termasuk untuk kompatibilitas untuk memungkinkan waktu peluruhan kebalikan dari tingkat belajar. lr disertakan untuk kompatibilitas, dianjurkan untuk menggunakan learning_rate sebagai gantinya.

ValueError Jika namanya kelainan bentuk.

iterations Variabel. Jumlah pelatihan langkah Optimizer ini telah berjalan.
weights Pengembalian variabel Optimizer ini berdasarkan urutan dibuat.

metode

add_slot

Lihat sumber

Menambahkan variabel slot yang baru untuk var .

add_weight

Lihat sumber

apply_gradients

Lihat sumber

Terapkan gradien untuk variabel.

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

Metode ini merangkum gradien dari semua replika di hadapan tf.distribute.Strategy secara default. Anda dapat agregat gradien diri dengan melewati experimental_aggregate_gradients=False .

Contoh:

 grads = tape.gradient(loss, vars)
grads = tf.distribute.get_replica_context().all_reduce('sum', grads)
# Processing aggregated gradients.
optimizer.apply_gradients(zip(grads, vars),
    experimental_aggregate_gradients=False)

 

args
grads_and_vars Daftar (gradien, variabel) pasang.
name nama opsional untuk operasi kembali. Default ke nama diteruskan ke Optimizer konstruktor.
experimental_aggregate_gradients Apakah untuk jumlah gradien dari replika yang berbeda dalam Keberadaan ini tf.distribute.Strategy . Jika False, tanggung jawab pengguna itu untuk agregat gradien. Default Benar.

Pengembalian
Sebuah Operation yang menerapkan gradien tertentu. The iterations akan secara otomatis meningkat sebesar 1.

kenaikan gaji
TypeError Jika grads_and_vars adalah kelainan bentuk.
ValueError Jika tidak ada variabel memiliki gradien.

from_config

Lihat sumber