这个报错是因为在TensorFlow 2.x版本中,会话(Session)不再需要显式地创建和关闭。而且,全局变量初始化操作也不再需要放在会话中执行。
那么,如何解决这个问题呢?请尝试按照以下方式修改您的代码:
import tensorflow as tf
# 定义一个32位浮点变量,初始值为0,这个代码就是不断更新w1参数,优化w1参数,滑动平均做了一个w1的影子
w1 = tf.Variable(0, dtype=tf.float32)
# 定义num_updates (NN的迭代轮数),初始值为0,不可被优化(训练),这个参数不训练
global_step = tf.Variable(0, trainable=False)
# 实例化滑动平均类,给删减率为0.99,当前轮数global_step
MOVING_AVERAGE_DECAY = 0.99
ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step)
# 获取所有可训练的变量
trainable_vars = tf.compat.v1.trainable_variables()
# ema.apply后面的括号里是更新列表,每次运行ema_op时,对更新列表中的元素求滑动平均值
ema_op = ema.apply(trainable_vars)
# 获取所有可训练变量的滑动平均值
ema_averages = ema.average(trainable_vars)
# 初始化所有变量(已过时)
# init_op = tf.compat.v1.global_variables_initializer()
# 不再需要显示地初始化全局变量
# 添加操作到默认图中
# with tf.compat.v1.Session() as sess:
# 添加初始化操作到图中
# sess.run(init_op)
# 创建一个Eager执行环境
tf.compat.v1.enable_eager_execution()
# 打印初始值
print("初始值:")
print("w1:", w1.numpy())
print("滑动平均值:", ema_averages.numpy())
# 更新w1的值并运行ema_op
w1.assign(1)
ema_op.run()
# 打印更新后的值和滑动平均值
print("更新后:")
print("w1:", w1.numpy())
print("滑动平均值:", ema_averages.numpy())
这样修改后,您应该可以顺利运行代码并得到正确的输出。希望能解决您的问题!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |