2016-07-30 12 views
2

Ich durchlaufe ein TensorFlow-Tutorial aus der packtpub-Videoserie. Leider scheint die Basis-RNN im Tutorial nicht mehr zu funktionieren, oder etwas Seltsames passiert. Irgendwelche Einsichten?RNN-Zellenbenennung Problem in TensorFlow

Hier ist der Fehler Ich erhalte:

Valueerror: Variable RNN/BasicRNNCell/Linear/Matrix bereits vorhanden ist, nicht zulässig. Wollten Sie in VarScope reuse = True setzen? Ursprünglich definiert bei:

File "<ipython-input-23-dcf4ba3c6842>", line 16, in <module> 
    outputs, states = tf.nn.dynamic_rnn(cell, x_, dtype = tf.float32, initial_state = None) 
    File "/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2869, in run_code 
    exec(code_obj, self.user_global_ns, self.user_ns) 
    File "/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2809, in run_ast_nodes 
    if self.run_code(code, result): 

Der Fehler erscheint, um anzuzeigen, dass eine Matrix oder etwas

Hier ist der Code ist es

import requests 
import numpy as np 
import math 
import tensorflow as tf 
import datetime 
from tqdm import tqdm 

dataUrl = "https://drcdata.blob.core.windows.net/data/weather.npz" 
response = requests.get(dataUrl) 
with open("weather.zip", "wb") as code: 
    code.write(response.content) 
#load into np array 
data = np.load("weather.zip") 
daily = data['daily'] 
weekly = data['weekly'] 

Mehr-Code verweist

num_weeks = len(weekly) 
dates = np.array([datetime.datetime.strptime(str(int(d)), '%Y%m%d') for d in weekly[:,0]]) 
def assign_season(date): 
    month = date.month 
    #spring = 0 
    if 3 <= month < 6: 
     season = 0 
    #summer = 1 
    elif 6 <= month < 9: 
     season = 1 
    elif 9 <= month < 12: 
     season = 2 
    elif month == 12 or month < 3: 
     season = 3 
    return season 

MEHR CODE

num_classes = 4 
num_inputs = 5 
#Historical state for RNN size 
state_size = 11 

labels = np.zeros([num_weeks, num_classes]) 
#read and convert to one-hot 
for i,d in enumerate(dates): 
    labels[i,assign_season(d)] = 1 

#extract and scale training data 
train = weekly[:,1:] 
train = train - np.average(train,axis=0) 
train = train/train.std(axis = 0) 

sess = tf.InteractiveSession() 

#Inputs 
x = tf.placeholder(tf.float32, [None, num_inputs]) 

#Special RNN TF Input Shape 
x_ = tf.reshape(x, [1, num_weeks, num_inputs]) 

#Define the labels 
y_ = tf.placeholder(tf.float32, [None, num_classes]) 

#Define RNN Cell 
#RNN's method for looking back in time. 
cell = tf.nn.rnn_cell.BasicRNNCell(state_size) 
#Intelligently handles recursion instead of unrolling full computation. 
outputs, states = tf.nn.dynamic_rnn(cell, x_, dtype = tf.float32, initial_state = None) 

#Define Weights and Biases 
W1 = tf.Variable(tf.truncated_normal([state_size, num_classes], stddev = 1.0/math.sqrt(num_inputs))) 
b1 = tf.Variable(tf.constant(0.1, shape = [num_classes])) 

#reshape output for normal usage 
#h1 = tf.reshape(outputs, [-1, state_size]) 

#softmax output, remember, its a classifier 
y = tf.nn.softmax(tf.matmul(h1, W1) + b1) 

TRAIN IT CODE

sess.run(tf.initialize_all_variables()) 

#Define Cost Function 
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y + 1e-50, y_)) 

#define train step 
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) 

#Define Accuracy 
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) 
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 

#Really train this thing. 
epochs = 500 
train_acc = np.zeros(epochs//10) 
test_acc = np.zeros(epochs//10) 

for i in tqdm(range(epochs), ascii=True): 
    if i % 10 == 0: #record for learning curve display 
     A = accuracy.eval(feed_dict={x: train, y_: labels}) 
     train_acc[i//10] = A 
    train_step.run(feed_dict={x: train, y_:labels}) 

PLOT SOME STUFF

%matplotlib inline 
import matplotlib.pyplot as plt 
plt.plot(train_acc) 
+0

Das gibt mir keine Fehler (Tensorflow 0.9). Können Sie den Rest Ihres Codes posten? Der Fehler deutet darauf hin, dass Sie möglicherweise mehrere Diagramme erstellen. –

+0

Ich lege jetzt alles in das Notebook. –

+0

Was ist seltsam, dass die Skflow-Version der RNN funktioniert. –

Antwort

0

Versuchen entweder den Standard Graph Löschen oder Zurücksetzen des Diagramms (siehe Remove nodes from graph or reset entire default graph). Ich hatte den gleichen Fehler nach der Deklaration meiner Grafik mit

und das Zurücksetzen der Standardgrafik löste das Problem für mich. Meine Vermutung ist, dass iPython Notebook den Graphenzustand zwischen Anrufen zu Notebook-Zellen gleich hält, während das Diagramm nach jedem Lauf gelöscht wird, wenn das Problem als Skript ausgeführt wird.