Cegah overfitting dan tingkatkan akurasi model machine learning Anda dengan menerapkan metode augmentasi data TensorFlow.
Augmentasi data adalah proses menerapkan berbagai transformasi ke data pelatihan. Ini membantu meningkatkan keragaman dataset dan mencegah overfitting. Overfitting sebagian besar terjadi saat Anda memiliki data terbatas untuk melatih model Anda.
Di sini, Anda akan mempelajari cara menggunakan modul augmentasi data TensorFlow untuk mendiversifikasi kumpulan data Anda. Ini akan mencegah overfitting dengan menghasilkan titik data baru yang sedikit berbeda dari data asli.
Sampel Dataset Yang Akan Anda Gunakan
Anda akan menggunakan kumpulan data kucing dan anjing dari Kaggle. Kumpulan data ini berisi sekitar 3.000 gambar kucing dan anjing. Gambar-gambar ini dibagi menjadi set pelatihan, pengujian, dan validasi.
Label 1.0 mewakili seekor anjing sedangkan label 0.0 mewakili seekor kucing.
Kode sumber lengkap yang menerapkan teknik augmentasi data dan yang tidak tersedia di a repositori GitHub.
Menginstal dan Mengimpor TensorFlow
Untuk menindaklanjuti, Anda harus memiliki a pemahaman dasar tentang Python. Anda juga harus memiliki pengetahuan dasar tentang pembelajaran mesin. Jika Anda memerlukan penyegaran, Anda mungkin ingin mempertimbangkan untuk mengikuti beberapa tutorial tentang pembelajaran mesin.
Membuka Google Colab. Ubah jenis runtime ke GPU. Kemudian, jalankan perintah ajaib berikut pada sel kode pertama untuk menginstal TensorFlow ke lingkungan Anda.
!pip pasang tensorflow
Impor TensorFlow serta modul dan kelasnya yang relevan.
impor tensorflow sebagai tf
dari tensorflow.keras.preprocessing.image impor ImageDataGenerator
dari tensorflow.keras.models impor Sekuensial
dari tensorflow.keras.layers impor Conv2D, MaxPooling2D, Ratakan, Padat, Dropout
Itu tensorflow.keras.preprocessing.image akan memungkinkan Anda untuk melakukan augmentasi data pada kumpulan data Anda.
Membuat Instance dari Kelas ImageDataGenerator
Buat contoh dari ImageDataGenerator kelas untuk data kereta api. Anda akan menggunakan objek ini untuk melakukan prapemrosesan data pelatihan. Ini akan menghasilkan kumpulan data gambar yang diperbesar secara real time selama pelatihan model.
Dalam tugas mengklasifikasikan apakah suatu gambar adalah kucing atau anjing, Anda dapat menggunakan teknik pembalikan, lebar acak, tinggi acak, kecerahan acak, dan pembesaran data. Teknik ini akan menghasilkan data baru yang berisi variasi data asli yang mewakili skenario dunia nyata.
# tentukan generator data gambar untuk pelatihan
train_datagen = ImageDataGenerator (skala ulang=1./255,
horizontal_flip=BENAR,
lebar_pergeseran_rentang=0.2,
tinggi_pergeseran_rentang=0.2,
rentang_kecerahan=[0.2,1.0],
zoom_range=0.2)
Buat instance lain dari ImageDataGenerator kelas untuk data uji. Anda akan membutuhkan skala ulang parameter. Ini akan menormalkan nilai piksel dari gambar uji agar sesuai dengan format yang digunakan selama pelatihan.
# tentukan generator data gambar untuk pengujian
test_datagen = ImageDataGenerator (skala ulang=1./255)
Buat instance terakhir dari ImageDataGenerator kelas untuk data validasi. Skala ulang data validasi dengan cara yang sama seperti data uji.
# tentukan generator data gambar untuk validasi
validasi_datagen = ImageDataGenerator (skala ulang=1./255)
Anda tidak perlu menerapkan teknik augmentasi lainnya pada data pengujian dan validasi. Ini karena model menggunakan data tes dan validasi untuk tujuan evaluasi saja. Mereka harus mencerminkan distribusi data asli.
Memuat Data Anda
Membuat DirectoryIterator objek dari direktori pelatihan. Ini akan menghasilkan kumpulan gambar yang diperbesar. Kemudian tentukan direktori yang menyimpan data pelatihan. Ubah ukuran gambar menjadi ukuran tetap sebesar 64x64 piksel. Tentukan jumlah gambar yang akan digunakan setiap batch. Terakhir, tentukan jenis label yang akan dibuat biner (mis., kucing atau anjing).
# mendefinisikan direktori pelatihan
train_data = train_datagen.flow_from_directory (direktori=r'/content/drive/MyDrive/cats_and_dogs_filtered/train',
ukuran_target=(64, 64),
ukuran_batch=32,
kelas_mode='biner')
Buat yang lain DirectoryIterator objek dari direktori pengujian. Tetapkan parameter ke nilai yang sama dengan data pelatihan.
# mendefinisikan direktori pengujian
test_data = test_datagen.flow_from_directory (direktori='/content/drive/MyDrive/cats_and_dogs_filtered/test',
ukuran_target=(64, 64),
ukuran_batch=32,
kelas_mode='biner')
Buat final DirectoryIterator objek dari direktori validasi. Parameternya tetap sama dengan data pelatihan dan pengujian.
# mendefinisikan direktori validasi
validasi_data = validasi_datagen.flow_from_directory (direktori='/content/drive/MyDrive/cats_and_dogs_filtered/validation',
ukuran_target=(64, 64),
ukuran_batch=32,
kelas_mode='biner')
Iterator direktori tidak menambah dataset validasi dan pengujian.
Menentukan Model Anda
Tentukan arsitektur jaringan saraf Anda. Gunakan Jaringan Syaraf Konvolusional (CNN). CNN dirancang untuk mengenali pola dan fitur dalam gambar.
model = Berurutan()
# convolutional layer dengan 32 filter ukuran 3x3
model.tambahkan (Conv2D(32, (3, 3), aktivasi ='relu', masukan_bentuk=(64, 64, 3)))# max pooling layer dengan ukuran pool 2x2
model.tambahkan (MaxPooling2D(pool_size=(2, 2)))# lapisan convolutional dengan 64 filter ukuran 3x3
model.tambahkan (Conv2D(64, (3, 3), aktivasi ='relu'))# max pooling layer dengan ukuran pool 2x2
model.tambahkan (MaxPooling2D(pool_size=(2, 2)))# meratakan keluaran dari lapisan convolutional dan pooling
model.tambahkan (Ratakan ())# lapisan terhubung penuh dengan 128 unit dan aktivasi ReLU
model.add (Padat(128, aktivasi='relu'))# drop out 50% unit secara acak untuk mencegah overfitting
model.add (Putus (0.5))
# lapisan keluaran dengan aktivasi sigmoid (klasifikasi biner)
model.add (Padat(1, aktivasi='sigmoid'))
Kompilasi model dengan menggunakan biner lintas-entropi fungsi kerugian. Masalah klasifikasi biner biasanya menggunakan Ini. Untuk pengoptimal, gunakan Pengoptimal Adam. Ini adalah algoritme pengoptimalan laju pembelajaran adaptif. Akhirnya, evaluasi model dalam hal akurasi.
model.kompilasi (kerugian='binary_crossentropy', pengoptimal='adam', metrik=['ketepatan'])
Cetak ringkasan arsitektur model ke konsol.
model.ringkasan()
Tangkapan layar berikut menunjukkan visualisasi arsitektur model.
Ini memberi Anda gambaran tentang bagaimana desain model Anda terlihat.
Latih Model Anda
Latih model menggunakan bugar() metode. Tetapkan jumlah langkah per epoch menjadi jumlah sampel pelatihan dibagi dengan batch_size. Juga, atur data validasi dan jumlah langkah validasi.
# Latih model pada data pelatihan
sejarah = model.fit (data_kereta,
langkah_per_Epoch=train_data.n // train_data.batch_size,
zaman =50,
validasi_data=validasi_data,
validasi_langkah=validasi_data.n // validasi_data.batch_size)
Itu ImageDataGenerator kelas menerapkan augmentasi data ke data pelatihan secara real time. Hal ini membuat proses pelatihan model menjadi lebih lambat.
Mengevaluasi Model Anda
Evaluasi kinerja model Anda pada data uji menggunakan evaluasi() metode. Juga, cetak kerugian dan akurasi pengujian ke konsol.
test_loss, test_acc = model.evaluasi (test_data,
langkah=test_data.n // test_data.batch_size)
mencetak(kerugian f'Test: {test_loss}')
mencetak(Akurasi f'Test: {test_acc}')
Tangkapan layar berikut menunjukkan kinerja model.
Model berperforma cukup baik pada data yang belum pernah dilihat.
Saat Anda menjalankan kode yang tidak menerapkan teknik augmentasi data, akurasi pelatihan model adalah 1. Yang berarti overfits. Itu juga berkinerja buruk pada data yang belum pernah dilihatnya sebelumnya. Ini karena ia mempelajari kekhasan dataset.
Kapan Augmentasi Data Tidak Membantu?
- Padahal datasetnya sudah beragam dan besar: Augmentasi data meningkatkan ukuran dan keragaman kumpulan data. Jika dataset sudah besar dan beragam, augmentasi data tidak akan berguna.
- Ketika dataset terlalu kecil: Penambahan data tidak dapat membuat fitur baru yang tidak ada dalam kumpulan data asli. Oleh karena itu, ini tidak dapat mengkompensasi set data kecil yang tidak memiliki sebagian besar fitur yang perlu dipelajari oleh model.
- Ketika jenis augmentasi data tidak sesuai: Misalnya, memutar gambar mungkin tidak membantu jika orientasi objek penting.
Apa Kemampuan TensorFlow
TensorFlow adalah perpustakaan yang beragam dan kuat. Itu mampu melatih model pembelajaran mendalam yang kompleks dan dapat berjalan di berbagai perangkat dari ponsel cerdas hingga kelompok server. Ini telah membantu perangkat komputasi canggih yang memanfaatkan pembelajaran mesin.