opt.minimize(loss,vars=[...])
不回亏
我可以在这之后计算损失,但是我要计算两次损失函数。
我如何在一个"单一的"程序中进行最小化和损失计算?步骤,使损失返回。
In Tensorflow第一个会这样做:
train_op = Optimizer.minimize(loss)
sess.run([loss, train_op], feed_dict=feed)
如何在Tensorflow 2中做到这一点
一种解决方案是使用渐变胶带。
import tensorflow as tf
opt = tf.keras.optimizers.SGD(learning_rate=0.1)
loss_fn = lambda: 3 * var1 * var1 + 2 * var2 * var2
var1 = tf.Variable(100.0)
var2 = tf.Variable(-2.0)
with tf.GradientTape() as tape:
loss = loss_fn() # alternativly some model.predict
print(loss)
grads = tape.gradient(loss, [var1,var2])
opt.apply_gradients(zip(grads, [var1,var2]))
print(var1.numpy())
print(var2.numpy())