Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

tf.train.ExponentialMovingAverage

TensorFlow 1 versi Lihat sumber di GitHub

Mempertahankan moving averages variabel dengan menggunakan peluruhan eksponensial.

Ketika pelatihan model, seringkali bermanfaat untuk menjaga rata-rata dari parameter dilatih bergerak. Evaluasi yang menggunakan rata-rata parameter kadang-kadang menghasilkan hasil yang signifikan lebih baik daripada nilai dilatih akhir.

The apply() metode menambahkan salinan bayangan dari variabel yang terlatih dan menambahkan ops yang mempertahankan rata-rata bergerak dari variabel terlatih dalam salinan bayangan mereka. Hal ini digunakan ketika membangun model pelatihan. Ops yang menjaga rata-rata bergerak biasanya dijalankan setelah setiap langkah pelatihan. The average() dan average_name() metode memberikan akses ke variabel bayangan dan nama-nama mereka. Mereka berguna ketika membangun sebuah model evaluasi, atau ketika mengembalikan model dari file pos pemeriksaan. Mereka membantu menggunakan rata-rata bergerak di tempat nilai-nilai dilatih terakhir untuk evaluasi.

Rata-rata bergerak dihitung dengan menggunakan peluruhan eksponensial. Anda menentukan nilai pembusukan saat membuat ExponentialMovingAverage objek. Variabel bayangan diinisialisasi dengan nilai awal yang sama sebagai variabel terlatih. Ketika Anda menjalankan ops untuk mempertahankan rata-rata bergerak, masing-masing variabel bayangan diperbarui dengan rumus:

shadow_variable -= (1 - decay) * (shadow_variable - variable)

Ini matematis setara dengan rumus klasik di bawah, tetapi penggunaan assign_sub op (yang "-=" dalam formula) memungkinkan update lockless bersamaan dengan variabel:

shadow_variable = decay * shadow_variable + (1 - decay) * variable

Nilai wajar untuk decay yang dekat dengan 1,0, biasanya dalam beberapa-sembilan berkisar: 0,999, 0,9999, dll

contoh penggunaan saat membuat model pelatihan:

 # Create variables.
var0 = tf.Variable(...)
var1 = tf.Variable(...)
# ... use the variables to build a training model...
...
# Create an op that applies the optimizer.  This is what we usually
# would use as a training op.
opt_op = opt.minimize(my_loss, [var0, var1])

# Create an ExponentialMovingAverage object
ema = tf.train.ExponentialMovingAverage(decay=0.9999)

with tf.control_dependencies([opt_op]):
    # Create the shadow variables, and add ops to maintain moving averages
    # of var0 and var1. This also creates an op that will update the moving
    # averages after each training step.  This is what we will use in place
    # of the usual training op.
    training_op = ema.apply([var0, var1])

...train the model by running training_op...
 

Ada dua cara untuk menggunakan moving average untuk evaluasi:

  • Membangun model yang menggunakan variabel bayangan bukan variabel. Untuk ini, gunakan average() metode yang mengembalikan variabel bayangan untuk variabel tertentu.
  • Membangun sebuah model normal, tetapi memuat file pos pemeriksaan untuk mengevaluasi dengan menggunakan nama variabel bayangan. Untuk penggunaan ini average_name() metode. Lihat tf.compat.v1.train.Saver untuk informasi lebih lanjut tentang memulihkan variabel disimpan.

Contoh memulihkan nilai-nilai variabel shadow:

 # Create a Saver that loads variables from their saved shadow values.
shadow_var0_name = ema.average_name(var0)
shadow_var1_name = ema.average_name(var1)
saver = tf.compat.v1.train.Saver({shadow_var0_name: var0, shadow_var1_name:
var1})
saver.restore(...checkpoint filename...)
# var0 and var1 now hold the moving average values
 

decay Mengapung. pembusukan untuk digunakan.
num_updates count opsional dari jumlah update diterapkan pada variabel.
zero_debias Jika True , nol debias bergerak-rata yang diinisialisasi dengan tensor.
name Tali. Opsional nama awalan digunakan untuk nama ops ditambahkan dalam apply() .

name Nama objek ExponentialMovingAverage ini.

metode

apply

Lihat sumber

Mempertahankan rata-rata dari variabel bergerak.

var_list harus daftar Variable atau Tensor benda. Metode ini menciptakan variabel shadow untuk semua elemen dari var_list . Variabel bayangan untuk Variable objek diinisialisasi ke nilai awal variabel ini. Mereka akan ditambahkan ke GraphKeys.MOVING_AVERAGE_VARIABLES koleksi. Untuk Tensor objek, variabel bayangan diinisialisasi ke 0 dan zero debiased (lihat docstring di assign_moving_average untuk lebih jelasnya).

bayangan variabel diciptakan dengan trainable=False dan ditambahkan ke GraphKeys.ALL_VARIABLES koleksi. Mereka akan dikembalikan oleh panggilan ke tf.compat.v1.global_variables() .

Pengembalian sebuah op yang update semua variabel bayangan dari nilai saat variabel yang terkait.

Perhatikan bahwa apply() dapat disebut beberapa kali. Ketika eksekusi bersemangat diaktifkan setiap panggilan untuk menerapkan akan memperbarui variabel sekali, sehingga kebutuhan ini disebut dalam satu lingkaran.

args
var_list Daftar Variabel atau Tensor benda. Variabel dan Tensors harus dari jenis bfloat16, float16, float32, atau float64.

Pengembalian
Operasi yang update rata-rata bergerak.

kenaikan gaji
TypeError Jika argumen bukan merupakan jenis yang diizinkan.

average

Lihat sumber

Mengembalikan Variable memegang rata-rata var .

args
var Sebuah Variable objek.

Pengembalian
Sebuah Variable objek atau None jika rata-rata bergerak dari var tidak dipertahankan.

average_name

Lihat sumber

Mengembalikan nama Variable memegang rata-rata untuk var .

Skenario khas untuk ExponentialMovingAverage adalah untuk menghitung rata-rata bergerak variabel selama pelatihan, dan mengembalikan variabel dari rata-rata bergerak dihitung selama evaluasi.

Untuk mengembalikan variabel, Anda harus tahu nama variabel bayangan. Nama dan variabel asli kemudian dapat diteruskan ke Saver() objek untuk mengembalikan variabel dari nilai rata-rata bergerak dengan: saver = tf.compat.v1.train.Saver({ema.average_name(var): var})

average_name() bisa disebut apakah atau tidak apply() telah dipanggil.

args
var Sebuah Variable objek.

Pengembalian
Sebuah string: Nama variabel yang akan digunakan atau digunakan oleh ExponentialMovingAverage class untuk menahan rata-rata bergerak dari var .

variables_to_restore

Lihat sumber

Mengembalikan peta nama untuk Variables untuk mengembalikan.

Jika variabel memiliki rata-rata bergerak, menggunakan rata-rata bergerak nama variabel sebagai nama restore; jika tidak, menggunakan nama variabel.

Sebagai contoh,

   variables_to_restore = ema.variables_to_restore()
  saver = tf.compat.v1.train.Saver(variables_to_restore)
 

Di bawah ini adalah contoh dari pemetaan seperti:

   conv/batchnorm/gamma/ExponentialMovingAverage: conv/batchnorm/gamma,
  conv_4/conv2d_params/ExponentialMovingAverage: conv_4/conv2d_params,
  global_step: global_step
 

args
moving_avg_variables daftar variabel yang memerlukan untuk menggunakan dari rata-rata bergerak nama variabel yang akan dipulihkan. Jika ada, akan default untuk variables.moving_average_variables () + variables.trainable_variables ()

Pengembalian
Sebuah peta dari restore_names ke variabel. Restore_name adalah baik asli atau bergerak versi rata-rata nama variabel, tergantung pada apakah nama variabel di moving_avg_variables .