为什么这个tensorflow教程代码不起作用

时间:2017-06-16 08:48:36

标签: python tensorflow lstm

现在我正在尝试使用lstm教程,看一下这本书。但它没有用。问题是什么? :

import tensorflow as tf

import numpy as np

from tensorflow.contrib import rnn

import pprint

pp = pprint.PrettyPrinter(indent=4)

sess = tf.InteractiveSession()

a = [1, 0, 0, 0]

b = [0, 1, 0, 0]

c = [0, 0, 1, 0]

d = [0, 0, 0, 1]

init=tf.global_variables_initializer()

with tf.variable_scope('one_cell') as scope:
    hidden_size = 2  
    cell = tf.contrib.rnn.BasicRNNCell(num_units=hidden_size)  
    print(cell.output_size, cell.state_size)  

    x_data = np.array([[a]], dtype=np.float32) 
    pp.pprint(x_data)
    outputs, _states = tf.nn.dynamic_rnn(cell, x_data, dtype=tf.float32)
    sess.run(init)
    pp.pprint(outputs.eval())

错误信息就是这样。请解决这个问题。

Attempting to use uninitialized value one_cell/rnn/basic_rnn_cell/weights
     [[Node: one_cell/rnn/basic_rnn_cell/weights/read = Identity[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](one_cell/rnn/basic_rnn_cell/weights)]]

2 个答案:

答案 0 :(得分:1)

您没有初始化一些图形变量,如上所述。将您的代码转移到此处,它将起作用。

outputs, _states = tf.nn.dynamic_rnn(cell, x_data, dtype=tf.float32)
init=tf.global_variables_initializer()
sess.run(init)

最佳做法是将init放在图表末尾和sess.run之前。

编辑:有关更多见解,请参阅What does tf.global_variables_initializer() do under the hood?

答案 1 :(得分:0)

在创建变量之前定义操作init。因此,此操作仅对当时定义的变量执行,即使您在创建变量后运行它也是如此。

所以只需移动init的定义就可以了。