Notebook yang complete :
- Notebook Data Preposessing
- Notebook Komparasi dengan nonDL (Notebook-nonDL)
- Notebook Komparasi dengan nonDL (Notebook-nonDL-newdataset)
- Notebook WGAN Percobaan Pertama (NotebookVer2) Tensorflow
- Notebook WGAN komplit dengan finetune Percobaan Kedua (NotebookVer2-torch) Pytorch
- Notebook WGAN komplit dengan finetune Percobaan Ketiga (NotebookVer2-torch-newdataset) Pytorch
Notebook yang belum ditest *karena ada masalah dengan software :
- Notebook WGAN komplit dengan finetune Percobaan Ketiga (NotebookVer2-torch-newdataset) Pytorch
- Notebook WGAN komplit dengan struktur dataset baru (NotebookVer2-torch-rework) Pytorch *update
- Notebook Komparasi dengan nonDL dengan struktur dataset baru (Notebook-nonDL-rework) *update
- Notebook Conditional WGAN-GP (CWGAN-GP_rewrite) Pytorch *BARU
Merapihkan kode dari CWGAN-RealFakedanPrediksi.ipynb ke NotebookCWGAN-GP_rewrite.ipynb dan melakukan experiment terhadap generator, discriminator dan hyperparameters.
latent_dim = 100 # Dimensi ruang laten untuk generator
num_classes = 8 # Jumlah kelas bidang profesi
data_dim = 6 # Dimensi data input (jumlah fitur)
lambda_gp = 10 # Koefisien gradient penalty untuk WGAN-GP
lr_g = 0.00001 # Learning rate untuk optimizer generator
lr_d = 0.00005 # Learning rate untuk optimizer discriminator
betas = (0.5, 0.9) # Parameter beta1 dan beta2 untuk Adam optimizer
batch_size = 64 # Ukuran batch data untuk pelatihan
num_epochs = 100 # Jumlah epoch pelatihan
patience = 20 # Jumlah epoch tanpa peningkatan untuk early stopping
min_delta = 0.001 # Minimum peningkatan loss untuk early stoppingPerubahan pada Generator dan Discriminator:
Pada Generator:
- Blok Residual: menambahkan koneksi residual yang membantu melatih jaringan yang lebih dalam dengan memungkinkan aliran gradien lebih mudah melalui jaringan.
- Desain Modular: Arsitektur sekarang lebih modular, dengan lapisan input, residual, dan output yang terpisah. Ini membuatnya lebih mudah untuk menyesuaikan kedalaman dan lebar jaringan.
- Kedalaman yang Ditingkatkan: Jaringan sekarang lebih dalam berkat adanya blok residual, yang membantu dalam mempelajari fitur yang lebih kompleks.
- Arsitektur Fleksibel: Jumlah blok residual dapat disesuaikan dengan mudah menggunakan parameter
num_residual_blocks. - Fungsi Aktivasi yang Lebih Baik: menggunakan LeakyReLU dengan kemiringan negatif 0,2, yang dapat membantu mencegah masalah "dying ReLU" dan meningkatkan stabilitas pelatihan.
- Operasi Inplace: Menggunakan
inplace=Truepada fungsi aktivasi dapat menghemat memori selama pelatihan.
Pada Discriminator:
- Blok Residual: menambahkan blok residual untuk membantu jaringan belajar fitur yang lebih kompleks dan memperlancar aliran gradien.
- LayerNorm: BatchNorm diganti dengan LayerNorm, yang sering kali lebih efektif untuk discriminator dalam banyak kasus GAN.
- Arsitektur yang Lebih Dalam: Penambahan blok residual membuat jaringan lebih dalam, sehingga dapat mempelajari representasi yang lebih kaya.
- Aktivasi Sigmoid untuk Output Real/Palsu: Saya menambahkan aktivasi sigmoid di akhir jaringan untuk memastikan output berada dalam rentang [0, 1], sehingga lebih mudah membedakan antara gambar asli dan palsu.
- Dropout: Dropout tetap digunakan untuk regularisasi, yang membantu mencegah overfitting.
- Fleksibilitas: Jumlah blok residual dapat disesuaikan dengan mudah menggunakan parameter
num_residual_blocks. - Aktivasi LeakyReLU: Saya menggunakan LeakyReLU dengan kemiringan negatif 0,2 untuk mencegah masalah dying ReLU.
perbedaan utama antara normalisasi di generator dan discriminator:
- Normalisasi:
- Generator menggunakan BatchNorm1d.
- Discriminator menggunakan LayerNorm.
- Alasan perbedaannya:
- BatchNorm vs LayerNorm:
- BatchNorm biasanya lebih efektif untuk generator karena membantu menjaga stabilitas selama pelatihan dan mengurangi perubahan distribusi internal (internal covariate shift).
- LayerNorm lebih cocok untuk discriminator karena tidak bergantung pada ukuran batch dan dapat memberikan hasil yang lebih konsisten, terutama saat bekerja dengan batch yang kecil atau bervariasi ukurannya.
- BatchNorm vs LayerNorm:
- ReLu -> LeakyReLu
- RmsProp -> AdamW
- learning rate (0.0001) -> learning rate (0.00001)
(WGAN-GP MODEL)
- input_size 100 -> input_size 128
- hidden_size 128 -> hidden_size 256
- optim.adam -> Adamw + weight_decay=1e-4
- input_size 91 -> input_size 90 (karena perubahan dataset)
perubahan ini diharapkan untuk meningkatkan stabilitas model
- input_size 90 -> input_size 88 (karena perubahan dataset)
- Implementasi seeding random manual pada setiap model
seed = 42 # Manual seed for reproducibility
# Set manual random seed for reproducibility
random.seed(seed)
torch.manual_seed(seed)
if torch.cuda.is_available():
torch.cuda.manual_seed(seed)- Implementasi train split (80% train, 20% validation) pada setiap model
- Menambahkan diagram untuk monitoring model seperti MSE dan wassserstein value
# Define hyperparameters
input_size = 128 # Size of the latent vector (noise)
hidden_size = 256
output_size = 88 # Number of features from the dataset (excluding the target variable)
batch_size = 128
epochs = 2500
critic_iterations = 5
weight_clipping_limit = 0.01
lr = 0.00001
seed = 42 # Manual seed# Hyperparameters
input_size = 128 # Size of the noise vector
hidden_size = 256
output_size = 88 # Number of features in the dataset (exclude the target column)
lr = 0.00001 # Learning rate
batch_size = 128
n_epochs = 2500
n_critic = 5 # Critic steps per generator step
lambda_gp = 10 # Weight for gradient penaltymenggunakan early stopping untuk model WGAN-GP
# Hyperparameters for early stopping
patience = 1000 # Number of epochs to wait for improvement
min_delta = 0.001 # Minimum change in the monitored loss to qualify as improvement
best_loss = float('inf') # Initialize best loss with a very large number
early_stop_counter = 0 # Counter to track patienceminor update karena menggunakan struktur dataset baru
# Define hyperparameters
input_size = 128 # Size of the latent vector (noise)
hidden_size = 256
output_size = 5 # Number of features from the dataset (excluding the target variable)
batch_size = 128
epochs = 2500
critic_iterations = 5
weight_clipping_limit = 0.01
lr = 0.00001
seed = 42 # Manual seed# Hyperparameters
input_size = 128 # Size of the noise vector
hidden_size = 256
output_size = 5 # Number of features in the dataset (exclude the target column)
lr = 0.00001 # Learning rate
batch_size = 128
n_epochs = 2500
n_critic = 5 # Critic steps per generator step
lambda_gp = 10 # Weight for gradient penaltymenggunakan early stopping untuk model WGAN-GP
# Hyperparameters for early stopping
patience = 1000 # Number of epochs to wait for improvement
min_delta = 0.001 # Minimum change in the monitored loss to qualify as improvement
best_loss = float('inf') # Initialize best loss with a very large number
early_stop_counter = 0 # Counter to track patience