如何在Tensorflow.js中训练卷积生成对抗网络?

问题描述 投票:0回答:1

我按照教程在 https:/www.tensorflow.orgtutorialsgenerativedcgan. 虽然这个教程是用python写的,但我正试图在node.js上使用tensorflow.js来实现它。我已经能够弄清楚如何翻译大部分使用的方法,除了在实际设置下面的训练步骤程序时。

# Notice the use of `tf.function`
# This annotation causes the function to be "compiled".
@tf.function
def train_step(images):
    noise = tf.random.normal([BATCH_SIZE, noise_dim])

    with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape:
      generated_images = generator(noise, training=True)

      real_output = discriminator(images, training=True)
      fake_output = discriminator(generated_images, training=True)

      gen_loss = generator_loss(fake_output)
      disc_loss = discriminator_loss(real_output, fake_output)

    gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables)
    gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables)

    generator_optimizer.apply_gradients(zip(gradients_of_generator, generator.trainable_variables))
    discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables))

显然,这里并不是所有的东西都可以翻译成tensorflow.js。到目前为止,我还无法弄清楚如何获取梯度并将其应用到优化器中。我曾尝试使用 tf.grad &amp。tf.grads 函数,但没有用。这是我目前掌握的情况。

function trainStep(images) {
    const noise = tf.randomNormal([BATCH_SIZE, noiseDim]);

    const generated = gen.apply(noise, { training: true });
    const realOut = dis.apply(images, { training: true });
    const genOut = dis.apply(generated, { training: true });

    const genLoss = generator.loss(genOut);
    const disLoss = discriminator.loss(realOut, genOut);

    // now what?
}

在tensorflow.js中是否有比指南中更好的方法? 如果有谁有任何资源能给我指明正确的方向,我将感激不尽。

javascript node.js tensorflow.js generative-adversarial-network
1个回答
0
投票

试试这个TensorFlow.js的官方codelab。

https:/codelabs.developers.google.comcodelabstfjs-training-classficationindex.html。

这是针对MNIST的,但是一旦你学会了,你就可以应用于你自己的数据集。

© www.soinside.com 2019 - 2024. All rights reserved.