2017-08-30 72 views
1

我使用TensorFlow並遇到與變量重用問題有關的錯誤。我的代碼如下:Tensorflow,變量W3已存在,不允許

# Lab 11 MNIST and Convolutional Neural Network 
import tensorflow as tf 
import random 
# import matplotlib.pyplot as plt 

from tensorflow.examples.tutorials.mnist import input_data 

#tf.set_random_seed(777) # reproducibility 

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) 
# Check out https://www.tensorflow.org/get_started/mnist/beginners for 
# more information about the mnist dataset 

# hyper parameters 
learning_rate = 0.001 
training_epochs = 15 
batch_size = 100 

# input place holders 
X = tf.placeholder(tf.float32, [None, 784]) 
X_img = tf.reshape(X, [-1, 28, 28, 1]) # img 28x28x1 (black/white) 
Y = tf.placeholder(tf.float32, [None, 10]) 

# L1 ImgIn shape=(?, 28, 28, 1) 
W1 = tf.Variable(tf.random_normal([3, 3, 1, 32], stddev=0.01)) 
# Conv  -> (?, 28, 28, 32) 
# Pool  -> (?, 14, 14, 32) 
L1 = tf.nn.conv2d(X_img, W1, strides=[1, 1, 1, 1], padding='SAME') 
L1 = tf.nn.relu(L1) 
L1 = tf.nn.max_pool(L1, ksize=[1, 2, 2, 1], 
       strides=[1, 2, 2, 1], padding='SAME') 

# L2 ImgIn shape=(?, 14, 14, 32) 
W2 = tf.Variable(tf.random_normal([3, 3, 32, 64], stddev=0.01)) 
# Conv  ->(?, 14, 14, 64) 
# Pool  ->(?, 7, 7, 64) 
L2 = tf.nn.conv2d(L1, W2, strides=[1, 1, 1, 1], padding='SAME') 
L2 = tf.nn.relu(L2) 
L2 = tf.nn.max_pool(L2, ksize=[1, 2, 2, 1], 
       strides=[1, 2, 2, 1], padding='SAME') 
L2_flat = tf.reshape(L2, [-1, 7 * 7 * 64]) 

# Final FC 7x7x64 inputs -> 10 outputs 
W3 = tf.get_variable("W3", shape=[7 * 7 * 64, 10], 
       initializer=tf.contrib.layers.xavier_initializer()) 

當我試圖運行第二次以後的代碼,會出現一個錯誤: ValueError異常:變量W3已經存在,不允許。你是否想在VarScope中設置reuse = True?在最初定義:

我所著的代碼Spyder的3.1.4,我使用Python 3.6,Windows7的和Tensorflow 1.2.1

回答

4

工作正常,我。如果你使用spyder運行它,它可能會在同一個圖上多次運行該腳本,在這種情況下,您將爲每次運行添加W3變量到圖中。要修復,請在腳本的開頭重置圖形。

tf.reset_default_graph()