Kode di atas adalah impor Python packages dan library yang Kita butuhkan
untuk memulai pelatihan GAN pada dataset CIFAR-10 menggunakan Keras dan
TensorFlow. Mari kita jelaskan masing-masing bagian dari kode tersebut dalam tahap
pertama pelatihan GAN:
a. Import Packages:
• from keras.layers import ...: Ini mengimpor berbagai jenis lapisan (layers)
yang akan digunakan dalam model GAN, seperti Reshape, Dense, Flatten,
Conv2D, Conv2DTranspose, Dropout, dan LeakyReLU.
• import numpy as np: Ini mengimpor library NumPy yang digunakan untuk
manipulasi data.
b. Membuat Direktori:
Kode ini adalah langkah awal dalam mengimpor semua library yang
diperlukan dan menyiapkan proyek Kita untuk melatih GAN pada dataset CIFAR-
10.
Kode di atas menginisialisasi beberapa parameter yang akan digunakan dalam tahap
selanjutnya dalam pelatihan GAN pada dataset CIFAR-10. Mari kita jelaskan masing-
masing parameter tersebut:
b. channels:
Ini adalah jumlah saluran warna dalam gambar. Dalam kasus dataset CIFAR-
10, gambar memiliki 3 saluran warna (merah, hijau, dan biru), sehingga channels
diatur ke 3.
c. img_shape:
Ini adalah tuple yang menggambarkan dimensi gambar dalam format (lebar,
tinggi, saluran). Dalam konteks CIFAR-10, img_shape diatur ke (32, 32, 3).
d. latent_dim:
Ini adalah dimensi vektor noise yang akan digunakan sebagai input untuk
generator. latent_dim menentukan seberapa besar kompleksitas model generator
dan berapa banyak informasi noise yang akan digunakan untuk menghasilkan
gambar-gambar palsu.
Hafidzurrohman Saifullah_10120486_M4_PRAKTIKUM
e. adam:
Ini adalah optimizer yang digunakan selama pelatihan. Adam adalah optimizer
yang populer dalam deep learning. Dalam kode di atas, Kita mengatur tingkat
pembelajaran (learning rate) dari Adam ke 0.0002, yang biasanya digunakan
dalam pelatihan GAN.
3. Building Generator
1. `model = Sequential()`: Di sini Kita membuat objek model `Sequential`, yang akan
digunakan untuk mengatur lapisan-lapisan secara berurutan dalam generator.
4. Building Discriminator
Kode di atas adalah langkah selanjutnya dalam melakukan pelatihan GAN pada
dataset CIFAR-10. Kode ini digunakan untuk menghubungkan generator dan
discriminator menjadi satu model GAN, serta untuk mengatur proses pelatihan GAN.
tetap statis. Hal ini diperlukan karena dalam pelatihan GAN, fokusnya adalah
meningkatkan kualitas gambar yang dihasilkan oleh generator, sehingga "dimatikan"
kemampuan discriminator untuk membedakan gambar.
6. Outputting Images
2. `r` dan `c`: Variabel ini mengatur jumlah baris (`r`) dan kolom (`c`) gambar yang
akan ditampilkan dalam grid saat gambar-gambar disimpan. Dalam kode ini, ada grid
5x5 yang menampilkan 25 gambar.
6. Rescaling Gambar:
- `gen_imgs = (gen_imgs + 1) / 2.0`: Gambar yang dihasilkan oleh generator
memiliki rentang nilai dari -1 hingga 1. Dalam langkah ini, nilai-nilai ini diubah
menjadi rentang 0 hingga 1 dengan mengambil nilai tengah sebagai 0.5. Ini untuk
memastikan gambar memiliki skala yang benar sebelum disimpan.
7. Membuat Subplot:
- Subplot (grid) dibuat dengan `r` baris dan `c` kolom untuk menampilkan gambar-
gambar yang dihasilkan.
7. Training GAN
Kode di atas adalah bagian yang melaksanakan proses pelatihan pada GAN
dengan dataset CIFAR-10. Ini merupakan langkah selanjutnya dalam melatih GAN
setelah sebelumnya telah membangun generator dan discriminator, serta
menghubungkannya dalam satu model GAN.
2. `X_train = X_train / 127.5 - 1.`: Mereskalasi data gambar dari rentang [0, 255]
menjadi rentang [-1, 1]. Ini merupakan langkah umum dalam pelatihan GAN untuk
memastikan gambar-gambar memiliki nilai yang sesuai untuk generator dan
discriminator.
5. Loop Pelatihan:
- Terdapat loop untuk mengiterasi melalui epoch (`for epoch in range(epochs`) dan
dalam setiap epoch, terdapat loop lagi untuk mengiterasi melalui batch (`for j in
range(bat_per_epo)`).
- Dalam loop batch, dilakukan pengambilan batch acak dari dataset (`idx =
np.random.randint(0, X_train.shape[0], batch_size)`) dan gambar-gambar ini
disimpan dalam variabel `imgs`.
- Discriminator dilatih:
- `d_loss_real` mengukur loss pada gambar-gambar asli dengan label `valid`.
- `d_loss_fake` mengukur loss pada gambar-gambar palsu dengan label `fakes`.
- `d_loss` adalah rata-rata loss antara gambar asli dan gambar palsu, dan ini
digunakan untuk mengoptimalkan discriminator.
- Vektor noise acak dihasilkan lagi untuk digunakan dalam melatih generator (`noise
= np.random.normal(0, 1, (batch_size, latent_dim)`).
- Generator dilatih dengan menggunakan model GAN. Label yang digunakan adalah
`valid`, yang berarti generator berusaha untuk "membohong" discriminator dengan
menghasilkan gambar-gambar yang semirip mungkin dengan gambar asli.
- Selama pelatihan, loss dari discriminator dan generator dicetak pada setiap iterasi
dalam format tertentu.
- Setelah selesai melatih discriminator dan generator dalam satu epoch, dipanggil
fungsi `save_imgs(epoch)` untuk menyimpan beberapa gambar yang dihasilkan oleh
generator selama pelatihan.
6. Terakhir, di luar loop pelatihan, satu gambar baru dihasilkan dengan generator
menggunakan vektor noise acak dan ditampilkan menggunakan
`plt.imshow(gen_imgs)`. Gambar ini digunakan untuk melihat hasil dari generator
setelah pelatihan.
Kode ini merangkum proses pelatihan GAN pada dataset CIFAR-10, di mana
generator dan discriminator saling berkompetisi untuk meningkatkan kualitas gambar
yang dihasilkan oleh generator seiring berjalannya epoch-epoch pelatihan.
Hafidzurrohman Saifullah_10120486_M4_PRAKTIKUM
8. Making GIF
Kode di atas bertujuan untuk membuat sebuah file GIF yang akan
menampilkan perkembangan gambar-gambar yang dihasilkan oleh generator selama
pelatihan GAN. Ini digunakan untuk membuat animasi yang mengilustrasikan
bagaimana kualitas gambar yang dihasilkan oleh generator berubah seiring
berjalannya waktu selama pelatihan.
1. `anim_file = 'dcgan.gif'`: Menentukan nama file GIF yang akan dihasilkan. Nama
file adalah 'dcgan.gif'.
6. Setelah selesai mengiterasi melalui semua file gambar, mengambil gambar terakhir
lagi dan menambahkannya ke GIF. Ini bertujuan untuk memastikan bahwa gambar
terakhir tetap ditampilkan dalam animasi.
Hafidzurrohman Saifullah_10120486_M4_PRAKTIKUM