试图使用未初始化的值变量 - Tensorflow(Python)

时间:2018-02-13 17:52:07

标签: python tensorflow

我是Tensorflow的新手,我无法弄清楚为什么我会收到此错误,因为我认为我已经初始化了所有变量。

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

它似乎属于以下summary_ops

File "/Users/ldg/PycharmProjects/TF", line 274, in train
    summary_ops = setup_summaries()
File "/Users/ldg/PycharmProjects/TF.py", line 238, in setup_summaries
    logged_epsilon = tf.Variable(0.)

我正在使用相关代码以使其清楚。

g = tf.Graph()
    session = tf.InteractiveSession(graph=g)
    with g.as_default(), session.as_default():
        K.set_session(session)
        num_actions = get_num_actions()
        graph_ops = build_graph(num_actions)
        saver = tf.train.Saver()

        session.run(tf.global_variables_initializer())
        # session.run(init_op)

        # Initialize target network weights
        session.run(graph_ops["reset_target_network_params"])

        # Set up game environments (one per thread)
         envs = [gym.make(FLAGS.game) for i in range(FLAGS.num_concurrent)]

        summary_ops = setup_summaries()
        summary_op = summary_ops[-1]

        # Initialize variables
        summary_save_path = summary_dir + "/" + experiment
        writer = tf.summary.FileWriter(summary_save_path, session.graph)
        if not os.path.exists(checkpoint_dir):
            os.makedirs(checkpoint_dir)


        # Show the agents training and write summary statistics
        last_summary_time = 0
        while True:
             now = time.time()
             if now - last_summary_time > FLAGS.summary_interval:
             summary_str = session.run(summary_op)
             writer.add_summary(summary_str, float(T))
             last_summary_time = now

使用封装的setup_summaries()

def setup_summaries():
    episode_reward = tf.Variable(0.)
    tf.summary.scalar("Episode Reward", episode_reward)
    episode_ave_max_q = tf.Variable(0.)    
    tf.summary.scalar("Max Q Value", episode_ave_max_q)
    logged_epsilon = tf.Variable(0.)
    tf.summary.scalar("Epsilon", logged_epsilon)
    logged_T = tf.Variable(0.)
    summary_vars = [episode_reward, episode_ave_max_q, logged_epsilon]
    summary_placeholders = [tf.placeholder("float") for i in range(len(summary_vars))]
    update_ops = [summary_vars[i].assign(summary_placeholders[i]) for i in range(len(summary_vars))]
    summary_op = tf.summary.merge_all()
    return summary_placeholders, update_ops, summary_op

我在Stackoverflow上的类似帖子上看到了无处不在,但我找不到解决方案,真的无法理解我没有初始化我的var。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您需要在summary_setup之后放置全局变量初始值设定项。问题是由于您在运行初始化程序后声明tf.variable这一事实。以下代码段工作

import tensorflow as tf
with tf.Graph().as_default():
    sess = tf.Session()
    with sess.as_default():

        summary_ops = setup_summaries()
        summary_op = summary_ops[-1]
        sess.run(tf.global_variables_initializer())        
        sess.run(summary_op)