バイクのイラストを生成するためのGANサンプルコードちょうだい

2024年6月17日

バイクのイラストを生成するためのGAN(Generative Adversarial Network)のサンプルコードを提供します。以下のコードでは、PythonとTensorFlowを使用してGANを実装し、バイクのイラストを生成します。

python
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.layers import Dense, Reshape, Flatten
from tensorflow.keras.models import Sequential
from tensorflow.keras.optimizers import Adam

# データの生成(今回はランダムなノイズ)
def generate_fake_samples(n_samples):
    X = np.random.rand(28 * 28 * n_samples)
    X = X.reshape((n_samples, 28, 28))
    y = np.zeros((n_samples, 1))
    return X, y

# 生成器の定義
def define_generator(latent_dim):
    model = Sequential()
    model.add(Dense(128, input_dim=latent_dim, activation='relu'))
    model.add(Dense(256, activation='relu'))
    model.add(Dense(512, activation='relu'))
    model.add(Dense(28*28, activation='sigmoid'))
    model.add(Reshape((28, 28)))
    return model

# 識別器の定義
def define_discriminator(input_shape=(28,28)):
    model = Sequential()
    model.add(Flatten(input_shape=input_shape))
    model.add(Dense(512, activation='relu'))
    model.add(Dense(256, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.0002, beta_1=0.5))
    return model

# GANの定義
def define_gan(generator, discriminator):
    discriminator.trainable = False
    model = Sequential()
    model.add(generator)
    model.add(discriminator)
    model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.0002, beta_1=0.5))
    return model

# GANのトレーニング
def train_gan(generator, discriminator, gan, latent_dim, n_epochs=10000, batch_size=128):
    for i in range(n_epochs):
        # 本物のサンプルを生成
        X_real, y_real = generate_fake_samples(batch_size // 2)
        # ランダムなノイズから偽のサンプルを生成
        X_fake, y_fake = generate_fake_samples(batch_size // 2)
        # トレーニング用のバッチを作成
        X, y = np.vstack((X_real, X_fake)), np.vstack((y_real, y_fake))
        # 識別器のトレーニング
        d_loss, _ = discriminator.train_on_batch(X, y)
        # 生成器の入力用のノイズを生成
        X_gan = np.random.rand(latent_dim * batch_size)
        X_gan = X_gan.reshape((batch_size, latent_dim))
        # GANのトレーニング(生成器を訓練し、識別器の重みは更新しない)
        y_gan = np.ones((batch_size, 1))
        g_loss = gan.train_on_batch(X_gan, y_gan)
        # 進捗の表示
        if (i+1) % 100 == 0:
            print(f'Epoch {i+1}, Discriminator Loss: {d_loss}, Generator Loss: {g_loss}')

# モデルの構築とトレーニング
latent_dim = 100
generator = define_generator(latent_dim)
discriminator = define_discriminator()
gan = define_gan(generator, discriminator)
train_gan(generator, discriminator, gan, latent_dim)

このサンプルコードでは、バイクのイラストを生成するGANを構築し、トレーニングします。ただし、本物のバイクのイラスト画像を使用せずにランダムなノイズから生成するため、実際のバイクのイラストとは異なるものが生成される可能性があります。実際のデータセットを使用してトレーニングする場合は、それに応じたデータの準備とモデルの調整が必要です。

未分類

Posted by ぼっち