Tensorflow 错误: FailedPreconditionError: 尝试使用未初始化的变量

我想将立体图像放入优化器中。这是我的代码:

tf.reset_default_graph()# configlearning_rate = 0.5training_epochs = 5# initinit = tf.global_variables_initializer()def conv2d(input_layer):    conv1 = tf.layers.conv2d(        inputs=input_layer,        filters=32,        kernel_size=[3, 3],        padding='same',        activation=tf.tanh,        use_bias=False    )    conv2 = tf.layers.conv2d(        inputs=conv1,        filters=32,        kernel_size=[3, 3],        padding='same',        activation=tf.tanh,        use_bias=False    )    conv3 = tf.layers.conv2d(        inputs=conv2,        filters=32,        kernel_size=[3, 3],        padding='same',        activation=tf.tanh,        use_bias=False    )    conv4 = tf.layers.conv2d(        inputs=conv3,        filters=32,        kernel_size=[3, 3],        padding='same',        activation=tf.tanh,        use_bias=False    )    logits = tf.layers.conv2d(        inputs=conv4,        filters=32,        kernel_size=[3, 3],        padding='same',        activation=tf.sigmoid,        use_bias=False    )    return logitsif __name__ == '__main__':    # read images    # preprocessing: rgb converted to float, zero_mean, uni_variance    images = reading_images()    mask_tensor = images["mask"][1]    # reshape images    img0 = images["img0"][1]    img1 = images["img1"][1]    img0_rs = tf.reshape(img0, [1, int(1988 / 2), int(2880 / 2), 3])    img1_rs = tf.reshape(img1, [1, int(1988 / 2), int(2880 / 2), 3])    # define symbolic placeholders    t_im0 = tf.placeholder(tf.float32, [1, None, None, 3])    t_im1 = tf.placeholder(tf.float32, [1, None, None, 3])    t_img = tf.concat([t_im0, t_im1], axis=3)    input_layer = tf.reshape(t_img, [1, int(1988 / 2), int(2880 / 2), 6])    logits = conv2d(input_layer)    with tf.name_scope("cost_function") as scope:        mask_tensor = tf.tile(mask_tensor, [1, 1, 3])        cost_function = -tf.reduce_mean(mask_tensor * tf.log(logits) + (1. - mask_tensor) * tf.log(1. - logits))    tf.summary.scalar("cost_function", cost_function)    with tf.name_scope("train") as scope:        optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost_function)    merged_summary_op = tf.summary.merge_all()    with tf.Session() as sess:        coord = tf.train.Coordinator()        threads = tf.train.start_queue_runners(sess=sess, coord=coord)        sess.run(init)        # summary_writer = tf.summary.FileWriter('/tmp/tensorflow_logs', graph=sess.graph)        for epoch in range(training_epochs):            print("epoch ", epoch)            avg_cost = 0.0            mask = sess.run(mask_tensor)            np_img0_rs = sess.run(img0_rs)            np_img1_rs = sess.run(img1_rs)            # res = t_img.eval(feed_dict={t_im0: img0_rs_, t_im1: img1_rs_})            sess.run([optimizer], feed_dict={t_im0: np_img0_rs, t_im1: np_img1_rs})    coord.request_stop()    coord.join(threads)

但我总是得到这个错误。我不知道是什么原因导致的,需要更改什么。我可以尝试什么方法来调试它?我真的尝试了很多方法来修复这个错误。

epoch  02017-07-17 10:26:03.719539: W tensorflow/core/kernels/queue_base.cc:294] _4_input_producer: Skipping cancelled enqueue attempt with queue not closed2017-07-17 10:26:03.719610: W tensorflow/core/kernels/queue_base.cc:294] _5_input_producer_1: Skipping cancelled enqueue attempt with queue not closedTraceback (most recent call last):  File "/home/test/Dropbox/occlusion_thesis/occ_small/main.py", line 111, in <module>    sess.run([optimizer], feed_dict={t_im0: np_img0_rs, t_im1: np_img1_rs})  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 789, in run    run_metadata_ptr)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 997, in _run    feed_dict_string, options, run_metadata)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1132, in _do_run    target_list, options, run_metadata)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1152, in _do_call    raise type(e)(node_def, op, message)tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value conv2d_4/kernel     [[Node: conv2d_4/kernel/read = Identity[T=DT_FLOAT, _class=["loc:@conv2d_4/kernel"], _device="/job:localhost/replica:0/task:0/cpu:0"](conv2d_4/kernel)]]Caused by op u'conv2d_4/kernel/read', defined at:  File "/home/test/Dropbox/occlusion_thesis/occ_small/main.py", line 84, in <module>    logits = conv2d(input_layer)  File "/home/test/Dropbox/occlusion_thesis/occ_small/main.py", line 60, in conv2d    use_bias=False  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/layers/convolutional.py", line 551, in conv2d    return layer.apply(inputs)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/layers/base.py", line 492, in apply    return self.__call__(inputs, *args, **kwargs)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/layers/base.py", line 434, in __call__    self.build(input_shapes[0])  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/layers/convolutional.py", line 137, in build    dtype=self.dtype)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/layers/base.py", line 374, in add_variable    trainable=trainable and self.trainable)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 1065, in get_variable    use_resource=use_resource, custom_getter=custom_getter)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 962, in get_variable    use_resource=use_resource, custom_getter=custom_getter)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 367, in get_variable    validate_shape=validate_shape, use_resource=use_resource)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 352, in _true_getter    use_resource=use_resource)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variable_scope.py", line 725, in _get_single_variable    validate_shape=validate_shape)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 200, in __init__    expected_shape=expected_shape)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 319, in _init_from_args    self._snapshot = array_ops.identity(self._variable, name="read")  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/gen_array_ops.py", line 1303, in identity    result = _op_def_lib.apply_op("Identity", input=input, name=name)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 767, in apply_op    op_def=op_def)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2506, in create_op    original_op=self._default_original_op, op_def=op_def)  File "/home/test/Programs/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1269, in __init__    self._traceback = _extract_stack()FailedPreconditionError (see above for traceback): Attempting to use uninitialized value conv2d_4/kernel     [[Node: conv2d_4/kernel/read = Identity[T=DT_FLOAT, _class=["loc:@conv2d_4/kernel"], _device="/job:localhost/replica:0/task:0/cpu:0"](conv2d_4/kernel)]]

回答:

我不确定你的代码是否完整,但错误信息对我来说似乎相当清楚:

FailedPreconditionError: 尝试使用未初始化的值 conv2d_4/kernel

查看你的代码,我看到你有 sess.run(init),但我找不到任何地方定义了 init。尝试在 with tf.Session() as sess: 之前添加 init = tf.global_variables_initializer(),这应该可以修复“未初始化的值”错误。

编辑: 有了完整的代码,我看到问题出自:

# initinit = tf.global_variables_initializer() # <<<<<<<<< 1def conv2d(input_layer):    ## 一大堆定义层的代码    return logitsif __name__ == '__main__':    ## 一大堆其他代码    logits = conv2d(input_layer) # <<<<<<<<< 2

我标记为 1 的地方是你定义初始化函数的地方,对于到那时为止定义的所有变量,而标记为 2 的地方是你实际定义网络的地方(以及其中的所有变量)。init 的定义必须在所有变量定义完成之后,否则你将会有未初始化的变量。

更新:

我在这里复制了我对答案的评论,因为这里可能是放置它的更好位置。tf.global_variables_initializer() 必须在你的图定义完成之后调用。如果你在开始时定义它,然后再向网络中添加层,添加的层的权重将不会被初始化,因为在你创建初始化操作时它们尚未定义。始终将 init 定义为在 with tf.Session() ... 之前的最后一个操作,以确保初始化时不会遗漏任何东西。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注