如何在 TensorFlow 2.0 中控制冗长
How to control verbosity in TensorFlow 2.0
在 TensorFlow 1.x 中,我可以非常自由地选择在训练期间如何以及何时打印 accuracy/loss 分数。例如,如果我想每 100 个时期打印一次训练损失,在 tf.Session()
中我会写:
if epoch % 100 == 0:
print(str(epoch) + '. Training Loss: ' + str(loss))
在 TF 2.0(alpha)发布后,Keras API 似乎强制坚持其标准输出。有没有办法恢复这种灵活性?
如果您不使用 Keras 模型方法(.fit
、.train_on_batch
、...)并且使用 eager execution 编写自己的训练循环(并可选择将其包装在 tf.function
以将其转换为图形表示形式)您可以像在 1.x
中那样控制冗长程度
training_epochs = 10
step = 0
for epoch in range(training_epochs)
print("starting ",epoch)
for features, labels in dataset:
with tf.GradientTape() as tape:
loss = compute_loss(model(features),labels)
gradients = tape.gradients(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
step += 1
if step % 10 == 0:
# measure other metrics if needed
print("loss: ", loss)
print("Epoch ", epoch, " finished.")
在 TensorFlow 1.x 中,我可以非常自由地选择在训练期间如何以及何时打印 accuracy/loss 分数。例如,如果我想每 100 个时期打印一次训练损失,在 tf.Session()
中我会写:
if epoch % 100 == 0:
print(str(epoch) + '. Training Loss: ' + str(loss))
在 TF 2.0(alpha)发布后,Keras API 似乎强制坚持其标准输出。有没有办法恢复这种灵活性?
如果您不使用 Keras 模型方法(.fit
、.train_on_batch
、...)并且使用 eager execution 编写自己的训练循环(并可选择将其包装在 tf.function
以将其转换为图形表示形式)您可以像在 1.x
training_epochs = 10
step = 0
for epoch in range(training_epochs)
print("starting ",epoch)
for features, labels in dataset:
with tf.GradientTape() as tape:
loss = compute_loss(model(features),labels)
gradients = tape.gradients(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
step += 1
if step % 10 == 0:
# measure other metrics if needed
print("loss: ", loss)
print("Epoch ", epoch, " finished.")