Skip to main content
 首页 » 编程设计

python之TensorFlow 变量无法初始化

2024年12月31日25txw1958

X=tf.placeholder(tf.float32,[None,32,32,3]) 
y=tf.placeholder(tf.int64,[None]) 
is_training=tf.placeholder(tf.bool) 
 
def simple_model(X,y): 
 
    Wconv1=tf.get_variable("Wconv1",shape=[7,7,3,32],use_resource=True) 
    bconv1=tf.get_variable('bconv1',shape=[32]) 
    W1=tf.get_variable('W1',shape=[5408,10]) 
    b1=tf.get_variable('b1',shape=[10]) 
 
    a1=tf.nn.conv2d(X,Wconv1,[1,2,2,1],'VALID')+bconv1 
    h1=tf.nn.relu(a1) 
 
    h1_flat=tf.reshape(h1,[-1,5408]) 
    y_out=tf.matmul(h1_flat,W1)+b1 
    return y_out 
 
init=tf.global_variables_initializer() 
 
with tf.Session() as sess: 
    sess.run(init) 
 
    sess.run(simple_model(X,y),feed_dict={X:X_train,y:y_train}) 

错误是

PreconditionError Attempting to use uninitialized variable Wconv1

我不知道代码有什么问题?

请您参考如下方法:

tf.global_variables_initializer对到那时创建的所有全局变量进行初始化操作。这意味着如果您稍后创建其他变量,它们将不会被该操作初始化。这是因为变量初始值设定项仅包含它们必须初始化的变量列表,并且这不会随着您添加更多变量而改变(事实上,tf.global_variables_initializer() 只是 的快捷方式>tf.variables_initializer(tf.global_variables()) 或 tf.variables_initializer(tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES)))。在您的情况下,在您之前创建 init 之后,将在第二次调用 sess.run 时创建变量。您需要在使用变量创建模型后创建初始化操作:

X=tf.placeholder(tf.float32,[None,32,32,3]) 
y=tf.placeholder(tf.int64,[None]) 
is_training=tf.placeholder(tf.bool) 
 
def simple_model(X,y): 
 
    Wconv1=tf.get_variable("Wconv1",shape=[7,7,3,32],use_resource=True) 
    bconv1=tf.get_variable('bconv1',shape=[32]) 
    W1=tf.get_variable('W1',shape=[5408,10]) 
    b1=tf.get_variable('b1',shape=[10]) 
 
    a1=tf.nn.conv2d(X,Wconv1,[1,2,2,1],'VALID')+bconv1 
    h1=tf.nn.relu(a1) 
 
    h1_flat=tf.reshape(h1,[-1,5408]) 
    y_out=tf.matmul(h1_flat,W1)+b1 
    return y_out 
 
my_model = simple_model(X,y) 
init=tf.global_variables_initializer() 
 
with tf.Session() as sess: 
    sess.run(init) 
 
    sess.run(my_model, feed_dict={X:X_train,y:y_train})