Rumah  >  Artikel  >  Peranti teknologi  >  Masalah peralihan pengedaran dalam latihan lawan

Masalah peralihan pengedaran dalam latihan lawan

王林
王林asal
2023-10-08 15:01:41959semak imbas

Masalah peralihan pengedaran dalam latihan lawan

Masalah anjakan pengedaran dalam latihan lawan, contoh kod khusus diperlukan

Abstrak: Anjakan pengedaran ialah masalah biasa dalam pembelajaran mesin dan tugas pembelajaran mendalam. Bagi menangani masalah ini, pengkaji telah mencadangkan kaedah latihan adversarial. Artikel ini akan memperkenalkan masalah anjakan pengedaran dalam latihan lawan dan memberikan contoh kod berdasarkan Generative Adversarial Networks (GAN).

  1. Pengenalan
    Dalam pembelajaran mesin dan tugasan pembelajaran mendalam, biasanya diandaikan bahawa data set latihan dan set ujian diambil secara bebas daripada pengedaran yang sama. Walau bagaimanapun, dalam aplikasi praktikal, andaian ini tidak berlaku kerana selalunya terdapat perbezaan dalam pengagihan antara data latihan dan data ujian. Anjakan pengedaran ini (Anjakan Pengedaran) akan membawa kepada kemerosotan prestasi model dalam aplikasi praktikal. Bagi menyelesaikan masalah ini, penyelidik telah mencadangkan kaedah latihan adversarial.
  2. Latihan adversarial
    Latihan adversarial ialah kaedah untuk mengurangkan perbezaan pengedaran antara set latihan dan ujian yang ditetapkan dengan melatih rangkaian penjana dan rangkaian diskriminator. Rangkaian penjana bertanggungjawab untuk menjana sampel yang serupa dengan data set ujian, manakala rangkaian diskriminator bertanggungjawab untuk menentukan sama ada sampel input datang daripada set latihan atau set ujian.

Proses latihan lawan boleh dipermudahkan kepada langkah berikut:
(1) Melatih rangkaian penjana: Rangkaian penjana menerima vektor hingar rawak sebagai input dan menjana sampel yang serupa dengan data set ujian.
(2) Latih rangkaian diskriminator: Rangkaian diskriminator menerima sampel sebagai input dan mengklasifikasikannya sebagai datang daripada set latihan atau set ujian.
(3) Penyebaran balik mengemas kini rangkaian penjana: Matlamat rangkaian penjana adalah untuk memperdayakan rangkaian diskriminator supaya salah mengklasifikasikan sampel yang dijana sebagai datang daripada set latihan.
(4) Ulang langkah (1)-(3) beberapa kali sehingga rangkaian penjana menumpu.

  1. Contoh Kod
    Berikut ialah contoh kod latihan lawan berdasarkan rangka kerja Python dan TensorFlow:
import tensorflow as tf
from tensorflow.keras import layers

# 定义生成器网络
def make_generator_model():
    model = tf.keras.Sequential()
    model.add(layers.Dense(256, input_shape=(100,), use_bias=False))
    model.add(layers.BatchNormalization())
    model.add(layers.LeakyReLU())

    model.add(layers.Dense(512, use_bias=False))
    model.add(layers.BatchNormalization())
    model.add(layers.LeakyReLU())

    model.add(layers.Dense(28 * 28, activation='tanh'))
    model.add(layers.Reshape((28, 28, 1)))
    return model

# 定义判别器网络
def make_discriminator_model():
    model = tf.keras.Sequential()
    model.add(layers.Flatten(input_shape=(28, 28, 1)))
    model.add(layers.Dense(512))
    model.add(layers.LeakyReLU())
    model.add(layers.Dense(256))
    model.add(layers.LeakyReLU())
    model.add(layers.Dense(1, activation='sigmoid'))
    return model

# 定义生成器和判别器
generator = make_generator_model()
discriminator = make_discriminator_model()

# 定义生成器和判别器的优化器
generator_optimizer = tf.keras.optimizers.Adam(1e-4)
discriminator_optimizer = tf.keras.optimizers.Adam(1e-4)

# 定义损失函数
cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True)

# 定义生成器的训练步骤
@tf.function
def train_generator_step(images):
    noise = tf.random.normal([BATCH_SIZE, 100])

    with tf.GradientTape() as gen_tape:
        generated_images = generator(noise, training=True)
        fake_output = discriminator(generated_images, training=False)
        gen_loss = generator_loss(fake_output)

    gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables)
    generator_optimizer.apply_gradients(zip(gradients_of_generator, generator.trainable_variables))

# 定义判别器的训练步骤
@tf.function
def train_discriminator_step(images):
    noise = tf.random.normal([BATCH_SIZE, 100])

    with tf.GradientTape() as disc_tape:
        generated_images = generator(noise, training=True)
        real_output = discriminator(images, training=True)
        fake_output = discriminator(generated_images, training=True)
        disc_loss = discriminator_loss(real_output, fake_output)

    gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables)
    discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables))

# 开始对抗训练
def train(dataset, epochs):
    for epoch in range(epochs):
        for image_batch in dataset:
            train_discriminator_step(image_batch)
            train_generator_step(image_batch)

# 加载MNIST数据集
(train_images, _), (_, _) = tf.keras.datasets.mnist.load_data()
train_images = train_images.reshape(train_images.shape[0], 28, 28, 1).astype('float32')
train_images = (train_images - 127.5) / 127.5
train_dataset = tf.data.Dataset.from_tensor_slices(train_images).shuffle(BUFFER_SIZE).batch(BATCH_SIZE)

# 指定批次大小和缓冲区大小
BATCH_SIZE = 256
BUFFER_SIZE = 60000

# 指定训练周期
EPOCHS = 50

# 开始训练
train(train_dataset, EPOCHS)

Dalam contoh kod di atas, kami mentakrifkan struktur rangkaian penjana dan diskriminator, dan memilih pengoptimum Adam dan crossover binari Fungsi kehilangan entropi. Kemudian, kami mentakrifkan langkah latihan penjana dan diskriminator dan melatih rangkaian melalui fungsi latihan. Akhirnya, kami memuatkan set data MNIST dan melakukan proses latihan lawan.

  1. Kesimpulan
    Artikel ini memperkenalkan masalah anjakan pengedaran dalam latihan lawan dan memberikan contoh kod berdasarkan rangkaian musuh generatif. Latihan adversarial ialah kaedah yang berkesan untuk mengurangkan perbezaan pengedaran antara set latihan dan set ujian, yang boleh meningkatkan prestasi model dalam amalan. Dengan mempraktikkan dan menambah baik contoh kod, kami boleh memahami dan menggunakan kaedah latihan lawan dengan lebih baik.

Atas ialah kandungan terperinci Masalah peralihan pengedaran dalam latihan lawan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn