Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

tf.keras.layers.BatchNormalization

TensorFlow 1 versi Lihat sumber di GitHub

Menormalkan dan masukan skala atau aktivasi.

Digunakan di notebook

Digunakan dalam panduan Digunakan dalam tutorial

Menormalkan para aktivasi dari lapisan sebelumnya pada setiap batch, yaitu menerapkan transformasi yang mempertahankan berarti aktivasi mendekati 0 dan aktivasi standar deviasi mendekati 1.

Batch normalisasi berbeda dari lapisan lain dalam beberapa aspek kunci:

1) Menambahkan BatchNormalization dengan training=True untuk model menyebabkan hasil dari salah satu contoh untuk bergantung pada isi dari semua contoh-contoh lain di minibatch a. Hati-hati saat melakukan padding batch atau masking contoh, karena ini dapat mengubah statistik minibatch dan mempengaruhi contoh lainnya.

2) Pembaruan bobot (bergerak statistik) didasarkan pada maju lulus model daripada hasil perhitungan gradien.

3) Saat melakukan inferensi menggunakan model yang mengandung bets normalisasi, umumnya (meskipun tidak selalu) diinginkan untuk menggunakan statistik akumulasi daripada statistik mini-batch. Hal ini dicapai dengan melewati training=False saat memanggil model, atau menggunakan model.predict .

axis Integer, sumbu yang harus dinormalisasi (biasanya fitur axis). Sebagai contoh, setelah Conv2D layer dengan data_format="channels_first" , set axis=1 di BatchNormalization .
momentum Momentum rata-rata bergerak.
epsilon mengapung kecil ditambahkan ke varians untuk menghindari membagi dengan nol.
center Jika Benar, menambahkan offset dari beta untuk tensor normal. Jika False, beta diabaikan.
scale Jika Benar, kalikan dengan gamma . Jika False, gamma tidak digunakan. Ketika lapisan berikutnya adalah linear (juga misalnya nn.relu ), ini dapat dinonaktifkan karena skala akan dilakukan oleh lapisan berikutnya.
beta_initializer Initializer untuk berat beta.
gamma_initializer Initializer untuk berat gamma.
moving_mean_initializer Initializer untuk mean bergerak.
moving_variance_initializer Initializer untuk varians bergerak.
beta_regularizer regularizer opsional untuk berat beta.
gamma_regularizer regularizer opsional untuk berat gamma.
beta_constraint kendala opsional untuk berat beta.
gamma_constraint kendala opsional untuk berat gamma.
renorm Apakah akan menggunakan Batch renormalization . Hal ini menambah variabel ekstra selama pelatihan. Kesimpulannya adalah sama baik untuk nilai parameter ini.
renorm_clipping Sebuah kamus yang dapat memetakan tombol 'Rmax', 'Rmin', 'dmax' untuk skalar Tensors digunakan untuk klip koreksi renorm. Koreksi (r, d) digunakan sebagai corrected_value = normalized_value * r + d , dengan r dijepitkan [Rmin, Rmax], dan d untuk [-dmax, dmax]. Rmax, Rmin hilang, dmax ditetapkan untuk inf, 0, inf, masing-masing.
renorm_momentum Momentum digunakan untuk memperbarui cara bergerak dan standar deviasi dengan renorm. Tidak seperti momentum , ini mempengaruhi pelatihan dan harus tidak terlalu kecil (yang akan menambahkan suara) atau terlalu besar (yang akan memberikan perkiraan basi). Perhatikan bahwa momentum masih diterapkan untuk mendapatkan sarana dan varians untuk inferensi.
fused jika True , menggunakan lebih cepat, implementasi menyatu, atau mengangkat ValueError jika pelaksanaan menyatu tidak dapat digunakan. Jika None , gunakan lebih cepat pelaksanaan jika memungkinkan. Jika False, tidak digunakan pelaksanaan menyatu.
trainable Boolean, jika True variabel akan ditandai sebagai dilatih.
virtual_batch_size Sebuah int . Secara default, virtual_batch_size adalah None , yang berarti bets normalisasi dilakukan di seluruh batch. Ketika virtual_batch_size tidak None , bukan melakukan "Ghost Batch Normalisasi", yang menciptakan virtual sub-batch yang sama dinormalisasi secara terpisah (dengan gamma bersama, beta, dan statistik bergerak). Harus membagi ukuran batch yang sebenarnya selama eksekusi.
adjustment Fungsi mengambil Tensor yang berisi (dinamis) bentuk tensor masukan dan kembali sepasang (skala, bias) untuk diterapkan pada nilai normal (sebelum gamma dan beta), hanya selama pelatihan. Sebagai contoh, jika sumbu == - 1, adjustment = lambda shape: ( tf.random.uniform(shape[-1:], 0.93, 1.07), tf.random.uniform(shape[-1:], -0.1, 0.1)) akan skala nilai dinormalisasi hingga 7% atas atau bawah, kemudian beralih hasilnya hingga 0,1 (dengan skala independen dan bias untuk setiap fitur tetapi dibagi di semua contoh), dan akhirnya menerapkan gamma dan / atau beta. Jika None , tidak ada penyesuaian diterapkan. tidak dapat ditentukan jika virtual_batch_size ditentukan.

argumen panggilan:

  • inputs : tensor Input (dari setiap peringkat).
  • training : Python boolean yang menunjukkan apakah lapisan harus bersikap dalam mode pelatihan atau dalam mode inferensi.
    • training=True : Lapisan akan menormalkan input dengan menggunakan mean dan varians dari batch saat input.
    • training=False : Lapisan akan menormalkan input dengan menggunakan mean dan varians statistik bergerak nya, dipelajari selama pelatihan.

Bentuk masukan: Sewenang-wenang. Menggunakan argumen kata kunci input_shape (tuple bilangan bulat, tidak termasuk sampel axis) saat menggunakan lapisan ini sebagai lapisan pertama dalam model. Bentuk Output: Bentuk Sama seperti masukan.
Tentang pengaturan layer.trainable = False pada `lapisan BatchNormalization:

Arti dari pengaturan layer.trainable = False adalah untuk membekukan lapisan, yaitu internal negara tidak akan berubah selama pelatihan: bobot dilatih yang tidak akan diperbarui selama fit() atau train_on_batch() , dan update negara yang tidak akan dijalankan.

Biasanya, ini tidak berarti bahwa lapisan dijalankan dalam mode inferensi (yang biasanya dikendalikan oleh training argumen yang bisa dilalui saat memanggil lapisan). "Negara Frozen" dan "mode inferensi" adalah dua konsep yang terpisah.

Namun, dalam kasus BatchNormalization lapisan, pengaturan trainable = False pada sarana lapisan bahwa lapisan akan kemudian berjalan dalam mode inferensi (yang berarti bahwa ia akan menggunakan rata-rata bergerak dan varians bergerak untuk menormalkan batch saat ini, daripada menggunakan mean dan varians dari batch saat ini).

Perilaku ini telah diperkenalkan di TensorFlow 2.0, untuk memungkinkan layer.trainable = False untuk menghasilkan perilaku yang paling umum diharapkan dalam kasus convnet fine-tuning digunakan.

Perhatikan bahwa:

  • Perilaku ini hanya terjadi pada TensorFlow 2.0. Dalam 1. *, pengaturan layer.trainable = False akan membekukan lapisan tetapi tidak akan beralih ke mode inferensi.
  • Mengatur trainable pada model yang mengandung lapisan lain secara rekursif akan mengatur trainable nilai dari semua lapisan dalam.
  • Jika nilai trainable atribut berubah setelah memanggil compile() pada model, nilai baru tidak berlaku untuk model ini sampai compile() dipanggil lagi.

persamaan normalisasi: Pertimbangkan aktivasi menengah (x) dari mini-batch ukuran \ (m \): Kita dapat menghitung mean dan varians dari batch \ ({\ mu_B} = \ frac {1} {m} \ sum_ {i = 1} ^ {m} {x_i} \) \ ({\ sigma_B ^ 2} = \ frac {1} {m} \ sum_ {i = 1} ^ {m} ({x_i} - {\ mu_B }) ^ 2 \) dan kemudian menghitung dinormalkan \ (x \), termasuk faktor kecil \ ({\ epsilon} \) untuk stabilitas numerik. \ (\ Hat {x_i} = \ frac {x_i - \ mu_B} {\ sqrt {\ sigma_B ^ 2 + \ epsilon}} \) Dan akhirnya \ (\ hat {x} \) secara linier diubah oleh \ ({\ gamma} \) dan \ ({\ beta} \), yang dipelajari parameter: \ ({} y_i = {\ gamma * \ hat {x_i} + \ beta} \) Referensi: