TensorFlow传入Tensor损失至minimize提示tape is required如何修复
错误原因
调用minimize时传入Tensor类型的loss时,必须同步传入记录了该loss计算过程的GradientTape实例,否则优化器无法获取梯度计算需要的链路信息。
修改后的可运行代码
import numpy as np import tensorflow as tf from tensorflow import keras x_train = [1, 2, 3] y_train = [1, 2, 3] W = tf.Variable(tf.random.normal([1]), name='weight') b = tf.Variable(tf.random.normal([1]), name='bias') hypothesis = W * x_train + b @tf.function def cost(): y_model = W * x_train + b error = tf.reduce_mean(tf.square(y_train - y_model)) return error optimizer = tf.optimizers.SGD(learning_rate=0.01) # 新增GradientTape上下文管理器包裹loss计算过程 with tf.GradientTape() as tape: cost_value = cost() # 调用minimize时传入tape参数 train = tf.keras.optimizers.Adam().minimize(cost_value, var_list=[W, b], tape=tape) tf.print(W) tf.print(b)
核心修改点
- 用
with tf.GradientTape() as tape:上下文包裹loss的计算逻辑,让tape自动记录loss计算过程中涉及可训练变量的梯度链路 - 调用
minimize方法时新增传入tape=tape参数,给优化器提供梯度计算所需的上下文信息
内容的提问来源于stack exchange,提问作者Qiqin Zhan
相关产品推荐
相关产品推荐

