Я следую учебному пособию в https://www.tensorflow.org/tutorials/generative/dcgan.
Хотя учебное пособие написано в python, я пытаюсь реализовать его с помощью tenorflow. js on node.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))
Ясно, что здесь не все переводится в tenorflow. js.
Пока что я не могу понять, как получить градиенты и применить их к оптимизатору.
Я пытался использовать функции tf.grad
& 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?
}
Есть ли лучший способ сделать это в тензорном потоке. js, чем показано в руководстве?
Буду признателен, если у кого-нибудь есть ресурсы, чтобы указать мне правильное направление.