Tensorflow,变量W3已经存在,不允许

时间:2017-08-30 02:37:43

标签: python tensorflow

我使用的是TensorFlow,遇到了与变量重用问题相关的错误。我的代码如下:

# 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

3 个答案:

答案 0 :(得分:30)

对我来说很好。如果你在spyder中运行它,它可能在同一个图形上多次运行脚本,在这种情况下,你将在每次运行时将W3变量添加到图形中。要修复,请在脚本开头重置图表。

tf.reset_default_graph()

答案 1 :(得分:3)

此外,如果您在Jupyter Notebook中工作,请尝试重启并清除输出命令

答案 2 :(得分:0)

您可能正在复制粘贴两个变量,您的模型可能试图通过该变量创建两个同名变量,从而导致此错误。