Оценить:
 Рейтинг: 0

Нейросети. Генерация изображений

Год написания книги
2023
Теги
<< 1 2 3 4 5 6 ... 13 >>
На страницу:
2 из 13
Настройки чтения
Размер шрифта
Высота строк
Поля

model.add(layers.Dense(784, activation='tanh'))

model.add(layers.Reshape((28, 28)))

return model

# Создание дискриминатора

def build_discriminator():

model = tf.keras.Sequential()

model.add(layers.Flatten(input_shape=(28, 28)))

model.add(layers.Dense(1024))

model.add(layers.LeakyReLU(0.2))

model.add(layers.Dense(512))

model.add(layers.LeakyReLU(0.2))

model.add(layers.Dense(256))

model.add(layers.LeakyReLU(0.2))

model.add(layers.Dense(1, activation='sigmoid'))

return model

# Функции потерь и оптимизаторы

cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True)

def discriminator_loss(real_output, fake_output):

real_loss = cross_entropy(tf.ones_like(real_output), real_output)

fake_loss = cross_entropy(tf.zeros_like(fake_output), fake_output)

total_loss = real_loss + fake_loss

return total_loss

def generator_loss(fake_output):

return cross_entropy(tf.ones_like(fake_output), fake_output)

generator_optimizer = tf.keras.optimizers.Adam(learning_rate=0.0002, beta_1=0.5)

discriminator_optimizer = tf.keras.optimizers.Adam(learning_rate=0.0002, beta_1=0.5)

# Создание генератора и дискриминатора

generator = build_generator()

discriminator = build_discriminator()

# Функция обучения GAN

def train_gan():

for epoch in range(epochs):

# Генерация случайных векторов из латентного пространства

noise = np.random.normal(0, 1, size=[batch_size, random_dim])

# Генерация сгенерированных изображений генератором

generated_images = generator(noise)

# Получение случайных реальных изображений из обучающего набора

image_batch = train_images[np.random.randint(0, train_images.shape[0], size=batch_size)]

# Сборка батча из реальных и сгенерированных изображений

X = np.concatenate([image_batch, generated_images])

# Создание векторов меток для реальных и сгенерированных изображений

y_dis = np.zeros(2 * batch_size)

y_dis[:batch_size] = 0.9 # односторонний мягкий ярлык для гладкости

# Обучение дискриминатора на батче

discriminator.trainable = True

d_loss = discriminator.train_on_batch(X, y_dis)

# Обучение генератора

noise = np.random.normal(0, 1, size=[batch_size, random_dim])

y_gen = np.ones(batch_size)

discriminator.trainable = False
<< 1 2 3 4 5 6 ... 13 >>
На страницу:
2 из 13