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试图使用未初始化的变量
Wconv1
我不知道代码有什么问题吗?
答案 0 :(得分:1)
tf.global_variables_initializer
对至此创建的所有全局变量进行初始化操作。这意味着,如果稍后创建其他变量,则该变量将不会被操作初始化。这是因为变量初始值设定项仅包含它们必须初始化的变量的列表,并且在您添加更多变量时不会改变(实际上,tf.global_variables_initializer()
只是tf.variables_initializer(tf.global_variables())
或{{1 }})。您的情况是,在较早创建tf.variables_initializer(tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES))
之后,在第二次调用sess.run
时将创建变量。您需要使用变量创建模型后,在 中创建初始化操作:
init