试图使用未初始化值RNN/output_projection_wrapper /偏置

问题描述:

我得到这个错误:试图使用未初始化值RNN/output_projection_wrapper /偏置

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value rnn/output_projection_wrapper/bias 
     [[Node: rnn/output_projection_wrapper/bias/read = Identity[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](rnn/output_projection_wrapper/bias)]] 

这是我的代码:

n_steps = 20 
n_inputs = 1 
n_neurons = 100 
n_outputs = 1 

X = tf.placeholder(tf.float32, [None, n_steps, n_inputs]) 
y = tf.placeholder(tf.float32, [None, n_steps, n_outputs]) 

cell = tf.contrib.rnn.OutputProjectionWrapper(
    tf.contrib.rnn.BasicRNNCell(num_units=n_neurons, activation=tf.nn.relu), 
    output_size=n_outputs) 


outputs, states = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32) 



learning_rate = 0.001 

loss = tf.reduce_mean(tf.square(outputs - y)) # MSE 
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate) 
training_op = optimizer.minimize(loss) 

init = tf.global_variables_initializer() 

saver = tf.train.Saver() 


n_iterations = 1500 
batch_size = 50 

with tf.Session() as sess: 
    init.run() 
    for iteration in range(n_iterations): 
     X_batch, y_batch = next_batch(batch_size, n_steps) 
     sess.run(training_op, feed_dict={X: X_batch, y: y_batch}) 
     if iteration % 100 == 0: 
      mse = loss.eval(feed_dict={X: X_batch, y: y_batch}) 
      print(iteration, "\tMSE:", mse) 

saver.save(sess, "./my_time_series_model") # not shown in the book 

with tf.Session() as sess: 
    X_new = time_series(np.array(t_instance[:-1].reshape(-1, n_steps, n_inputs))) 
    y_pred = sess.run(outputs, feed_dict={X: X_new}) 

我该如何解决这个问题?

这里,第二个会话出现问题,因为您没有使用该会话初始化变量。因此,最好只为一个图定义一个会话(因为重新初始化会覆盖已训练的变量)。

sess_config = tf.ConfigProto(allow_soft_placement=True, 
            log_device_placement=True) 
sess = tf.Session(config=sess_config) 
sess.run(init) 
# use this session for all computations 
for iteration in range(n_iterations): 
    X_batch, y_batch = next_batch(batch_size, n_steps) 
    sess.run(training_op, feed_dict={X: X_batch, y: y_batch}) 
    if iteration % 100 == 0: 
     mse = loss.eval(feed_dict={X: X_batch, y: y_batch}) 
     print(iteration, "\tMSE:", mse) 

saver.save(sess, "./my_time_series_model") # not shown in the book 

X_new = time_series(np.array(t_instance[:-1].reshape(-1, n_steps, n_inputs))) 
y_pred = sess.run(outputs, feed_dict={X: X_new}) 
+0

我仍然收到相同的错误。 –

+0

看到我的编辑,我添加了更多细节 –