当我运行此代码时,我收到错误:
"UnboundLocalError: local variable 'tf' referenced before assignment"
在我宣布权重的行中。为什么将tf视为未分配的变量?
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/",one_hot = True)
n_nodes_hl1 = 500
n_nodes_hl2 = 500
n_nodes_hl3 = 500
n_classes = 10
batch_size = 128
x = tf.placeholder('float',[None,784]) #THrows error if the matrix is not 784-dim vec
y = tf.placeholder('float')
def convolutional_neural_network_model(x):
#The Line with the Error
weights = {'W_conv1':tf.Variable(tf.random_normal([5,5,1,32])),
'W_conv2':tf.Variable(tf.random_normal([5,5,32,64])),
'W_fc':tf.Variable(tf.random_normal([7*7*64,1024])),
'out':tf.Variable(tf.random_normal([1024, n_classes]))}
biases = {'b_conv1':tf.Variable(tf.random_normal([32])),
'b_conv2':tf.Variable(tf.random_normal([64])),
'b_fc':tf.Variable(tf.random_normal([1024])),
'out':tf.Variable(tf.random_normal([n_classes]))}
x = tf.reshape(x,shape=[-1,28,28,1])
conv1 = conv2d(x,weights['W_conv1'])
conv1 = maxpool2d(conv1)
conv2 = conv2d(conv1,weights['W_conv2'])
conv2 = maxpool2d(conv2)
fc = tf.reshape(conv2,[-1,7*7*64])
tf = tf.nn.relu(tf.matmul(fc,weights['W_fc']) + biases['b_fc'])
output = tf.matmul(fc,weights['out']) + biases['out']
return output
def train_neural_network(x):
prediction = convolutional_neural_network_model(x)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = prediction,labels = y))
# learning_rate = 0.001
optimizer = tf.train.AdamOptimizer().minimize(cost)
#
hm_epochs = 10
#
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
#
for epoch in range(hm_epochs):
epoch_loss = 0
for _ in range(int(mnist.train.num_examples/batch_size)):
epoch_x,epoch_y = mnist.train.next_batch(batch_size)
_, c = sess.run([optimizer,cost], feed_dict={x: epoch_x, y:epoch_y})
epoch_loss += c
print('Epoch',epoch,'/',hm_epochs,' loss :',epoch_loss)
#
correct = tf.equal(tf.argmax(prediction,1),tf.argmax(y,1))
#
accuracy = tf.reduce_mean(tf.cast(correct,'float'))
print('Accuracy :',accuracy.eval({x:mnist.test.images,y:mnist.test.labels}))
#
def conv2d(x,W):
return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding='SAME')
def maxpool2d(x):
return tf.nn.max_pool(x,ksize = [1,2,2,1],strides=[1,2,2,1],padding='SAME')
if __name__ == '__main__':
print('Begin')
train_neural_network(x)
print('Done')
答案 0 :(得分:1)
导入tensorflow as tf
后,您会在以下行重新定义tf
:
tf = tf.nn.relu(tf.matmul(fc,weights['W_fc']) + biases['b_fc'])
更改此变量的名称将解决问题。
答案 1 :(得分:0)
tf = tf.nn.relu(tf.matmul(fc,weights['W_fc']) + biases['b_fc'])
如果tf
,则不应使用import tensorflow as tf
作为变量的名称;目前还不清楚你是指变量还是模块。