现在我正在尝试使用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)]]
答案 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的定义就可以了。