GAN মডেল Train এবং Evaluate করা

Generative Adversarial Networks (GANs) - কেরাস (Keras) - Machine Learning

539

GAN (Generative Adversarial Network) একটি ধরনের নিউরাল নেটওয়ার্ক আর্কিটেকচার যা দুটি মডেল (একটি Generator এবং একটি Discriminator) ব্যবহার করে কাজ করে। Generator মডেলটি নতুন ডেটা তৈরি করার চেষ্টা করে এবং Discriminator মডেলটি সেগুলোর বৈধতা যাচাই করে (এটি বলবে যে এটি আসল ডেটা নাকি Generator দ্বারা তৈরি করা ডেটা)। এই দুটি মডেল একে অপরের বিরুদ্ধে প্রশিক্ষিত হয়, এবং তাদের উদ্দেশ্য হল তাদের দক্ষতা উন্নত করা।

GAN এর মৌলিক কাঠামো:

  1. Generator: এটি একটি নেটওয়ার্ক যা সাধারণভাবে কিছু র্যান্ডম নইস (noise) ইনপুট নেয় এবং সেখান থেকে নতুন, বাস্তবসম্মত ডেটা তৈরি করার চেষ্টা করে (যেমন একটি ইমেজ)।
  2. Discriminator: এটি একটি নেটওয়ার্ক যা আসল ডেটা এবং Generator দ্বারা তৈরি ডেটার মধ্যে পার্থক্য করতে শিখে।

Training GAN একটি চ্যালেঞ্জিং কাজ হতে পারে কারণ এর মধ্যে দুটি মডেলকে একসাথে প্রশিক্ষণ দিতে হয়, এবং এগুলি একে অপরের বিরুদ্ধে কাজ করে।

১. GAN মডেল Train করার পদক্ষেপ

১.1 Generator এবং Discriminator মডেল তৈরি করা

প্রথমে Generator এবং Discriminator মডেল তৈরি করতে হবে। নীচে একটি সাধারণ GAN মডেলের জন্য কোড দেওয়া হলো:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LeakyReLU
import numpy as np

# Generator মডেল
def create_generator():
    model = Sequential()
    model.add(Dense(128, input_dim=100))  # ইনপুট ডাইমেনশন হল 100
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dense(256))
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dense(512))
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dense(1024))
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dense(784, activation='tanh'))  # আউটপুট 28x28x1 আকারের হবে (MNIST এর জন্য)
    return model

# Discriminator মডেল
def create_discriminator():
    model = Sequential()
    model.add(Dense(1024, input_dim=784))
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dense(512))
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dense(256))
    model.add(LeakyReLU(alpha=0.2))
    model.add(Dense(1, activation='sigmoid'))  # 0 বা 1 দিয়ে নির্ধারণ করা হবে আসল না জেনারেটেড
    return model

১.2 GAN মডেল তৈরি করা

এখন, Generator এবং Discriminator মডেল দুটি একত্রে একটি GAN মডেল তৈরি করতে হবে। এই মডেলে, Generator এবং Discriminator দুটি একে অপরের বিরুদ্ধে কাজ করবে।

from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam

# GAN মডেল তৈরি
def create_gan(generator, discriminator):
    discriminator.trainable = False  # GAN এর প্রশিক্ষণে Discriminator আপডেট হবে না
    gan_input = layers.Input(shape=(100,))
    x = generator(gan_input)
    gan_output = discriminator(x)
    model = Model(gan_input, gan_output)
    return model

১.3 কম্পাইল করা এবং মডেল প্রশিক্ষণ শুরু করা

এখন, আমাদের Discriminator এবং GAN মডেল দুটি কম্পাইল করতে হবে এবং প্রশিক্ষণ শুরু করতে হবে। GAN এর প্রশিক্ষণ একটি ব্যাটারি-বাই-ব্যাটারি পদ্ধতি অনুসরণ করে, যেখানে প্রথমে Discriminator এবং তারপর Generator প্রশিক্ষিত হয়।

# Optimizer
optimizer = Adam(lr=0.0002, beta_1=0.5)

# Discriminator কম্পাইল করা
discriminator = create_discriminator()
discriminator.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])

# GAN মডেল কম্পাইল করা
gan = create_gan(generator, discriminator)
gan.compile(loss='binary_crossentropy', optimizer=optimizer)

১.4 GAN Training Loop

GAN এর প্রশিক্ষণের জন্য একটি সাধারণ লুপ তৈরি করতে হবে, যেখানে আমরা প্রথমে Discriminator কে আসল এবং জেনারেটেড ইমেজ দিয়ে প্রশিক্ষিত করব, তারপর Generator কে প্রশিক্ষিত করব যাতে এটি আরও বাস্তবসম্মত ইমেজ তৈরি করতে শিখতে পারে।

def train_gan(epochs, batch_size, generator, discriminator, gan, X_train):
    batch_count = X_train.shape[0] // batch_size
    for epoch in range(epochs):
        for _ in range(batch_count):
            # আসল ছবি নির্বাচন
            real_images = X_train[np.random.randint(0, X_train.shape[0], batch_size)]

            # র্যান্ডম নইস থেকে জেনারেটেড ছবি তৈরি
            noise = np.random.normal(0, 1, (batch_size, 100))
            generated_images = generator.predict(noise)

            # Discriminator প্রশিক্ষণ: আসল এবং জেনারেটেড ছবি নিয়ে
            d_loss_real = discriminator.train_on_batch(real_images, np.ones((batch_size, 1)))
            d_loss_fake = discriminator.train_on_batch(generated_images, np.zeros((batch_size, 1)))
            d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)

            # Generator প্রশিক্ষণ: Discriminator কে ধোকা দিতে
            noise = np.random.normal(0, 1, (batch_size, 100))
            g_loss = gan.train_on_batch(noise, np.ones((batch_size, 1)))  # গেটরকে বাস্তব হিসেবে প্রতারিত করা

        # Epoch শেষে মুদ্রণ
        print(f"{epoch} [D loss: {d_loss[0]} | D accuracy: {100 * d_loss[1]}] [G loss: {g_loss}]")

এখানে, train_gan ফাংশনে আমরা দুটি মডেল (Discriminator এবং Generator) একসাথে প্রশিক্ষণ দিচ্ছি।


২. GAN মডেল Evaluate করা

GAN মডেলের অ্যাকচুয়াল ইভালুয়েশন সাধারণত Generator মডেলের আউটপুটের উপর করা হয়, কারণ আমাদের লক্ষ্য হল সঠিকভাবে নতুন ডেটা তৈরি করা। এখানে Discriminator মডেলটি শুধুমাত্র বাস্তব এবং জেনারেটেড ডেটার মধ্যে পার্থক্য তৈরি করতে সাহায্য করে।

২.1 Generated Images Evaluation

সাধারণভাবে, Generator এর আউটপুট মূল্যায়ন করার জন্য image quality এবং diversity পরীক্ষা করা হয়, কিন্তু GAN মডেলের জন্য ঐতিহ্যগত মেট্রিক্স (যেমন Accuracy) কম ব্যবহৃত হয়। তার পরিবর্তে, আপনি বিভিন্ন মেট্রিক্স যেমন Inception Score (IS) এবং Fréchet Inception Distance (FID) ব্যবহার করতে পারেন।

Inception Score (IS) এবং FID Score সাধারণত GAN মডেল মূল্যায়ন করতে ব্যবহৃত হয়:

  • Inception Score (IS): এটি ইমেজের গুণগতমান এবং বৈচিত্র্য নির্ধারণ করতে ব্যবহৃত হয়। এটি GAN এর মাধ্যমে তৈরি করা ইমেজগুলির বৈশিষ্ট্য পরিমাপ করতে সাহায্য করে।
  • Fréchet Inception Distance (FID): এটি উৎপন্ন ইমেজ এবং আসল ডেটার মধ্যে পার্থক্য পরিমাপ করতে ব্যবহৃত হয়।

সারাংশ

GAN মডেল প্রশিক্ষণ দুটি অংশে বিভক্ত:

  1. Discriminator Training: আসল এবং জেনারেটেড ডেটার মধ্যে পার্থক্য সনাক্ত করার জন্য Discriminator কে প্রশিক্ষিত করা।
  2. Generator Training: Generator কে এমন ডেটা তৈরি করার জন্য প্রশিক্ষিত করা যা Discriminator কে বিভ্রান্ত করবে।

এই প্রশিক্ষণ প্রক্রিয়াটি বেশ সময়সাপেক্ষ এবং সামঞ্জস্যপূর্ণ হতে পারে, তবে এটি ক্রমাগতভাবে দুই মডেলকে একে অপরের বিরুদ্ধে শিখিয়ে থাকে।

GAN মডেলের evaluation সাধারণত Generator এর তৈরি করা ডেটার গুণমান এবং বৈচিত্র্য পরিমাপ করার মাধ্যমে করা হয়।

Content added By
Promotion

Are you sure to start over?

Loading...