Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tensorflow, Variable W3 already exists, disallowed

I was using TensorFlow and encountered an error related to the problem of variable reuse. My code is as follows:

# 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())

When I tried to run the code after 2nd time, an error occur: ValueError: Variable W3 already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:

I writed the code Spyder 3.1.4, I'm using Python 3.6, Windows7 and Tensorflow 1.2.1

like image 327
Eokseob Kim Avatar asked Aug 30 '17 02:08

Eokseob Kim


2 Answers

Works fine for me. If you're running it in spyder, it may be running the script multiple times on the same graph, in which case you'll be adding the W3 variable to the graph for each run. To fix, reset the graph at the beginning of the script.

tf.reset_default_graph()
like image 191
DomJack Avatar answered Oct 02 '22 13:10

DomJack


Also if you working in Jupyter Notebook, try restart and clear output command

like image 26
Daniel Chepenko Avatar answered Oct 02 '22 14:10

Daniel Chepenko