
Terjemahan panduan ikhtisar dari Tensorflow.org. Panduan ini akan memberi Anda dasar-dasar untuk memulai dengan Keras. Membaca membutuhkan waktu 10 menit.
Impor tf.keras
tf.keras
adalah implementasi dari spesifikasi TensorFlow Keras API. Ini adalah API tingkat tinggi untuk model pengembangan dan pelatihan yang mencakup dukungan kelas satu untuk fungsionalitas spesifik TensorFlow seperti
eksekusi yang cepat , jaringan pipa
tf.data
, dan
Estimator .
tf.keras
mempermudah penggunaan TensorFlow tanpa mengorbankan fleksibilitas dan kinerja.
Untuk memulai, impor
tf.keras
sebagai bagian dari pengaturan TensorFlow Anda:
from __future__ import absolute_import, division, print_function, unicode_literals import tensorflow as tf from tensorflow import keras
tf.keras
dapat menjalankan kode Keras-kompatibel apa pun, tetapi perlu diingat:
- Versi
tf.keras
dalam rilis TensorFlow terbaru mungkin berbeda dari versi keras
terbaru di PyPI. Lihat tf.keras.__version__
. - Saat Anda menyimpan bobot model,
tf.keras
melakukan ini secara default dalam format pos pemeriksaan. Lewati save_format='h5'
untuk menggunakan HDF5 (atau tambahkan ekstensi .h5
ke .h5
file).
Bangun model yang sederhana
Model berurutan
Di Keras, Anda mengumpulkan
lapisan untuk membangun
model . Model adalah grafik layer (biasanya). Jenis model yang paling umum adalah lapisan tumpukan:
tf.keras.Sequential
. Model yang sama.
Kami membangun jaringan yang sepenuhnya terhubung sederhana (mis., Multilayer perceptron):
from tensorflow.keras import layers model = tf.keras.Sequential()
Kustomisasi layer
Banyak varietas lapisan
tf.keras.layers
. Sebagian besar dari mereka menggunakan konstruktor argumen umum:
activation
: Mengatur fungsi aktivasi untuk layer. Parameter ini menentukan nama fungsi bawaan atau objek yang dipanggil. Parameter tidak memiliki nilai default.kernel_initializer
dan bias_initializer
: Skema inisialisasi yang membuat bobot lapisan (inti dan shift). Parameter ini bisa berupa nama atau objek yang dipanggil. "Glorot uniform"
default adalah "Glorot uniform"
.kernel_regularizer
dan bias_regularizer
: Skema bias_regularizer
ditambahkan ke bobot layer (core dan shift), seperti regularisasi L1 atau L2. Secara default, regularisasi tidak diatur.
Contoh instance dari lapisan `tf.keras.layers.Dense` menggunakan argumen konstruktor:
Pelatihan dan penilaian
Pengaturan pelatihan
Setelah model dibangun, konfigurasikan proses pembelajaran dengan memanggil metode
compile
:
model = tf.keras.Sequential([
tf.keras.Model.compile
menerima tiga argumen penting:
optimizer
: Objek ini mendefinisikan prosedur pelatihan. Lewati instance optimizer dari modul tf.keras.optimizers
, seperti tf.keras.optimizers.Adam
atau tf.keras.optimizers.SGD
. Jika Anda hanya ingin menggunakan opsi default, Anda juga dapat menentukan pengoptimal dengan kata kunci seperti 'adam'
atau 'sgd'
.loss
: Ini adalah fungsi yang diminimalkan dalam proses pembelajaran. Di antara variasi umum adalah kesalahan standar ( mse
), categorical_crossentropy
, binary_crossentropy
. Fungsi kerugian ditentukan berdasarkan nama atau dengan melewatkan objek yang dipanggil dari modul tf.keras.losses
.metrics
: Digunakan untuk memantau pelatihan. Ini adalah nama string atau objek yang dipanggil dari modul tf.keras.metrics
.- Selain itu, untuk memastikan bahwa model dilatih dan dievaluasi dengan penuh semangat, periksa apakah Anda memberikan parameter
run_eagerly=True
ke kompiler
Selanjutnya, kita akan melihat beberapa contoh konfigurasi model untuk pelatihan:
Belajar dari NumPy Data
Untuk kumpulan data yang lebih kecil, gunakan array memori NumPy untuk melatih dan mengevaluasi model. Model ini "terlatih" tentang data pelatihan menggunakan metode `fit`:
import numpy as np data = np.random.random((1000, 32)) labels = np.random.random((1000, 10)) model.fit(data, labels, epochs=10, batch_size=32)
tf.keras.Model.fit
mengambil tiga argumen penting:
epochs
: Belajar dipecah menjadi * zaman *. Era adalah satu iterasi atas semua data input (ini dilakukan dalam batch kecil).batch_size
: Saat mentransmisikan data NumPy, model memecah data menjadi blok yang lebih kecil (batch) dan beralih ke blok ini selama pelatihan. Angka ini menunjukkan ukuran setiap blok data. Ingat bahwa blok terakhir mungkin lebih kecil jika jumlah total catatan tidak dibagi dengan ukuran kumpulan.validation_data
: Saat membuat prototipe model, Anda ingin melacak kinerjanya dengan mudah pada data validasi. Melewati tuple input data dan label dengan argumen ini memungkinkan model untuk menampilkan nilai-nilai dari fungsi yang hilang dan metrik dalam mode output untuk data yang dikirim pada akhir setiap era.
Berikut ini contoh menggunakan
validation_data
:
import numpy as np data = np.random.random((1000, 32)) labels = np.random.random((1000, 10)) val_data = np.random.random((100, 32)) val_labels = np.random.random((100, 10)) model.fit(data, labels, epochs=10, batch_size=32, validation_data=(val_data, val_labels))
Pelatihan menggunakan dataset tf.data
Gunakan API Kumpulan Data untuk skala database besar atau pelatihan di beberapa perangkat. Lewati instance dari `tf.data.Dataset` ke metode
fit
:
Karena
Dataset
menyediakan data dalam batch, kode ini tidak memerlukan argumen
batch_size
.
Kumpulan data juga dapat digunakan untuk memvalidasi:
dataset = tf.data.Dataset.from_tensor_slices((data, labels)) dataset = dataset.batch(32) val_dataset = tf.data.Dataset.from_tensor_slices((val_data, val_labels)) val_dataset = val_dataset.batch(32) model.fit(dataset, epochs=10, validation_data=val_dataset)
Penilaian dan prediksi
Metode
tf.keras.Model.evaluate
dan
tf.keras.Model.predict
dapat menggunakan data NumPy dan
tf.data.Dataset
.
Ini adalah bagaimana Anda dapat
memperkirakan kerugian dalam mode keluaran dan metrik untuk data yang disediakan:
Dan di sini adalah bagaimana
memprediksi output level terakhir dalam mode output untuk data yang disediakan dalam bentuk array NumPy:
Membangun model yang kompleks
API Fungsional
Model
tf.keras.Sequential
adalah tumpukan lapisan sederhana yang Anda tidak dapat membayangkan model yang sewenang-wenang. Gunakan API fungsional Keras untuk membangun topologi model yang kompleks, seperti:
- Model Input Berganda
- Model dengan banyak keluaran,
- Model dengan lapisan umum (lapisan yang sama disebut beberapa kali),
- Model dengan aliran data yang tidak konsisten (mis., Hubungan residual).
Membangun model dengan API fungsional berfungsi sebagai berikut:
- Contoh layer dapat dipanggil dan mengembalikan tensor.
- Input dan output tensor digunakan untuk menentukan instance dari
tf.keras.Model
- Model ini dilatih seperti model `Sequential`.
Contoh berikut menggunakan API fungsional untuk membangun jaringan yang sederhana dan terhubung sepenuhnya:
inputs = tf.keras.Input(shape=(32,))
Buat instance model dengan input dan output ini.
model = tf.keras.Model(inputs=inputs, outputs=predictions)
Model Subklasifikasi
Buat model yang sepenuhnya dapat disesuaikan menggunakan subclassing
tf.keras.Model
dan
tf.keras.Model
distribusi langsung Anda sendiri. Buat layer dalam metode
__init__
dan atur sebagai atribut dari instance kelas. Tetapkan propagasi langsung dalam metode
call
.
Subkelas model sangat berguna ketika eksekusi yang diinginkan diaktifkan, karena memungkinkan Anda untuk menulis distribusi langsung secara imperatif.
Catatan: jika Anda ingin model Anda
selalu dieksekusi secara imperatif, Anda dapat mengatur
dynamic=True
ketika Anda memanggil
super
constructor.
Poin kunci: Gunakan API yang benar untuk bekerja. Meskipun subklas model memberikan fleksibilitas, Anda harus membayarnya dengan kompleksitas yang lebih besar dan potensi kesalahan kustom yang lebih besar. Jika memungkinkan, pilih API fungsional.
Contoh berikut menunjukkan model tf.keras.Model subclass menggunakan distribusi langsung kustom, yang tidak diharuskan imperatif:
class MyModel(tf.keras.Model): def __init__(self, num_classes=10): super(MyModel, self).__init__(name='my_model') self.num_classes = num_classes
Buat instance dari kelas model baru:
model = MyModel(num_classes=10)
Lapisan khusus
Buat layer kustom dengan
tf.keras.layers.Layer
dan mengimplementasikan metode berikut:
__init__
: Secara opsional tentukan sublayers yang akan digunakan dalam lapisan ini.- *
build
: Buat layer weight. Tambahkan bobot menggunakan metode add_weight
call
: Tentukan distribusi langsung.- Secara opsional, layer dapat diserialisasi dengan menerapkan metode
get_config
dan metode from_config
.
Di bawah ini adalah contoh dari lapisan pengguna yang mengalikan matriks (
matmul
) diumpankan ke input dengan matriks kernel:
class MyLayer(layers.Layer): def __init__(self, output_dim, **kwargs): self.output_dim = output_dim super(MyLayer, self).__init__(**kwargs) def build(self, input_shape):
Buat model menggunakan lapisan khusus Anda:
model = tf.keras.Sequential([ MyLayer(10), layers.Activation('softmax')])
Kolbeki
Kolbek adalah objek yang ditransfer ke model untuk menyesuaikan dan memperluas perilakunya selama pelatihan. Anda dapat menulis panggilan balik sendiri atau menggunakan
tf.keras.callbacks
yang meliputi:
tf.keras.callbacks.ModelCheckpoint
: Menyimpan breakpoints model secara berkala.
tf.keras.callbacks.LearningRateScheduler
: Secara dinamis mengubah langkah pembelajaran.
tf.keras.callbacks.EarlyStopping
: Menghentikan pelatihan saat hasil validasi berhenti membaik.
tf.keras.callbacks.TensorBoard:
Memantau Penggunaan Model Perilaku
Papan tarik
Untuk menggunakan
tf.keras.callbacks.Callback
, berikan kepada metode model
fit
:
callbacks = [
Menyimpan dan Memulihkan
Hanya menyimpan nilai bobot
Simpan dan muat bobot model menggunakan
tf.keras.Model.save_weights
:
model = tf.keras.Sequential([ layers.Dense(64, activation='relu', input_shape=(32,)), layers.Dense(10, activation='softmax')]) model.compile(optimizer=tf.keras.optimizers.Adam(0.001), loss='categorical_crossentropy', metrics=['accuracy'])
Secara default, bobot model disimpan dalam format pos pemeriksaan TensorFlow. Berat juga dapat disimpan dalam format Keras HDF5 (nilai default untuk implementasi universal Keras):
Menyimpan hanya konfigurasi model
Konfigurasi model dapat disimpan - ini membuat serialisasi arsitektur model tanpa bobot. Konfigurasi yang disimpan dapat memulihkan dan menginisialisasi model yang sama, bahkan tanpa kode yang menentukan model aslinya. Keras mendukung format serialisasi JSON dan YAML:
import json import pprint pprint.pprint(json.loads(json_string))
Memulihkan model (diinisialisasi ulang) dari JSON:
fresh_model = tf.keras.models.model_from_json(json_string)
Serializing model ke YAML memerlukan instalasi `pyyaml`
sebelum mengimpor TensorFlow :
yaml_string = model.to_yaml() print(yaml_string)
Memulihkan model dari YAML:
fresh_model = tf.keras.models.model_from_yaml(yaml_string)
Catatan: model subclass tidak berseri, karena arsitekturnya ditentukan oleh kode Python di tubuh metode `call`.
Menyimpan seluruh model dalam satu file
Seluruh model dapat disimpan ke file yang berisi nilai bobot, konfigurasi model, dan bahkan konfigurasi pengoptimal. Ini akan memungkinkan Anda untuk mengatur breakpoint model dan melanjutkan pelatihan nanti dari posisi yang persis sama bahkan tanpa akses ke kode sumber.
# model = tf.keras.Sequential([ layers.Dense(10, activation='softmax', input_shape=(32,)), layers.Dense(10, activation='softmax') ]) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(data, labels, batch_size=32, epochs=5) # HDF5 model.save('my_model.h5') # . model = tf.keras.models.load_model('my_model.h5')
Eksekusi yang bersemangat
Eksekusi yang cepat adalah lingkungan pemrograman yang sangat penting yang segera menjalankan operasi. Ini tidak diperlukan untuk Keras, tetapi didukung oleh
tf.keras
dan berguna untuk memeriksa program dan debugging Anda.
Semua model pembangunan API `tf.keras` kompatibel dengan eksekusi yang cepat. Meskipun `Sequential` dan API fungsional dapat digunakan, eksekusi yang cepat sangat berguna ketika
mensubklasifikasikan model dan membangun
lapisan khusus - API ini mengharuskan Anda untuk menulis distribusi langsung dalam bentuk kode (alih-alih API yang membuat model dengan merakit lapisan yang ada).
Distribusi
Banyak GPU
model
tf.keras
dapat dijalankan pada banyak GPU menggunakan
tf.distribute.Strategy
. API ini menyediakan pembelajaran terdistribusi di beberapa GPU dengan sedikit atau tanpa perubahan kode yang ada.
Saat ini,
tf.distribute.MirroredStrategy
satu
tf.distribute.MirroredStrategy
satunya strategi distribusi yang didukung.
MirroredStrategy
mereplikasi grafik dengan
pembelajaran sinkron menggunakan semua-mengurangi pada satu mesin. Untuk menggunakan `
distribute.Strategy
,
.scope()
instalasi pengoptimal, desain, dan kompilasi model
.scope()
Strategy
.scope()
`, lalu latih model tersebut.
Contoh berikut mendistribusikan
tf.keras.Model
antara beberapa GPU pada mesin yang sama.
Pertama, kami mendefinisikan model dalam area strategi terdistribusi:
strategy = tf.distribute.MirroredStrategy() with strategy.scope(): model = tf.keras.Sequential() model.add(layers.Dense(16, activation='relu', input_shape=(10,))) model.add(layers.Dense(1, activation='sigmoid')) optimizer = tf.keras.optimizers.SGD(0.2) model.compile(loss='binary_crossentropy', optimizer=optimizer) model.summary()
Kemudian kami melatih model pada data seperti biasa:
x = np.random.random((1024, 10)) y = np.random.randint(2, size=(1024, 1)) x = tf.cast(x, tf.float32) dataset = tf.data.Dataset.from_tensor_slices((x, y)) dataset = dataset.shuffle(buffer_size=1024).batch(32) model.fit(dataset, epochs=1)
Setelah verifikasi, terjemahan juga akan muncul di Tensorflow.org. Jika Anda ingin berpartisipasi dalam terjemahan dokumentasi situs web Tensorflow.org ke dalam bahasa Rusia, silakan hubungi secara pribadi atau komentar. Setiap koreksi atau komentar sangat dihargai.