TensorFlow报错Attempting to use uninitialized value beta1_power_18 求解决方案
解决TensorFlow中“Attempting to use uninitialized value beta1_power_18”错误
这个错误的核心原因是TensorFlow中的变量(包括优化器内部维护的变量,比如Adam的beta1_power、beta2_power)没有被正确初始化。你代码里只创建了InteractiveSession,但没有执行变量初始化的操作,导致运行时这些变量还未被赋值就被调用了。
具体解决方案
在创建会话之后,必须添加全局变量初始化的操作,确保所有变量(包括你定义的网络权重、偏置,以及优化器自动生成的内部变量)都被正确初始化:
修正后的代码示例
import tensorflow as tf import numpy as np class Model: def __init__(self, input_neuron=2, hidden_neuron=10, output_neuron=2): self.input_neuron = input_neuron self.hidden_neuron = hidden_neuron self.output_neuron = output_neuron self.x = tf.placeholder(tf.float32, [None, self.input_neuron]) self.y = tf.placeholder(tf.float32, [None, self.output_neuron]) self.model = self.graph() self.sess = tf.InteractiveSession() # 关键步骤:初始化所有全局变量 self.sess.run(tf.global_variables_initializer()) def graph(self): # 示例网络结构,可根据你的实际代码调整 w1 = tf.Variable(tf.random_normal([self.input_neuron, self.hidden_neuron])) b1 = tf.Variable(tf.zeros([self.hidden_neuron])) hidden = tf.nn.relu(tf.matmul(self.x, w1) + b1) w2 = tf.Variable(tf.random_normal([self.hidden_neuron, self.output_neuron])) b2 = tf.Variable(tf.zeros([self.output_neuron])) output = tf.matmul(hidden, w2) + b2 # 若使用Adam优化器,会自动生成beta1_power等内部变量,这些也需要初始化 loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=output, labels=self.y)) optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss) return output
原理说明
tf.global_variables_initializer()会遍历TensorFlow图中所有的全局变量(包括你手动定义的Variable,以及优化器如AdamOptimizer创建的辅助变量),并为它们分配预设的初始值。只有执行了这个操作,后续的模型计算才能正常调用这些变量。
内容的提问来源于stack exchange,提问作者ashukid
相关产品推荐
相关产品推荐

