TensorFlow关闭eager execution模式下如何计算均方误差(MSE)
TensorFlow关闭eager execution模式下计算均方误差的解决方案
报错本质是关闭eager执行后,TensorFlow进入静态图模式,所有运算返回的
Tensor对象只是计算图的节点,还未执行实际数值计算,因此不支持.numpy()方法直接取值。
你使用的是最新版TensorFlow 2.x系列,静态图相关接口已迁移到tf.compat.v1命名空间下,可按以下两种场景选择实现方式:
方案1:单独计算MSE的数值结果
通过会话运行计算图节点获取实际值,代码示例如下:
import tensorflow as tf # TF2.x关闭eager执行的正确写法 tf.compat.v1.disable_eager_execution() # 此处替换为你实际的真实值、预测值张量定义 y_true = tf.constant([[1.0], [2.0], [3.0]]) y_prediction = tf.constant([[1.1], [2.2], [2.9]]) # 方式1:使用Keras内置MSE接口 mse_loss = tf.keras.losses.MeanSquaredError()(y_true, y_prediction) # 方式2:使用原生算子实现,计算结果和方式1完全一致 # mse_loss = tf.reduce_mean(tf.square(y_true - y_prediction)) # 开启会话执行计算获取数值 with tf.compat.v1.Session() as sess: MSE = sess.run(mse_loss) print(MSE)
方案2:在Keras模型训练流程中使用
如果是将MSE作为模型损失函数使用,不需要手动调用方法取值,直接在模型编译阶段指定损失即可,框架会在训练时自动计算:
model.compile(optimizer='adam', loss=tf.keras.losses.MeanSquaredError()) # 后续正常调用model.fit训练即可
内容的提问来源于stack exchange,提问作者Ariya
相关产品推荐
相关产品推荐

