【问题标题】:Tensorflow : FailedPreconditionError: Attempting to use uninitialized value conv2d_transpose/biasTensorflow:FailedPreconditionError:尝试使用未初始化的值 conv2d_transpose/bias
【发布时间】:2020-04-26 19:30:25
【问题描述】:

我正在尝试构建一个使用转置卷积操作的模型,但是当我尝试将权重和偏差作为参数传递给模型函数时,它会出错。

import tensorflow as tf
import cv2


class WeighsTest:
    def __model_1(self, plh_var1,weights,bias):
        conv = tf.nn.conv2d(plh_var1, weights["v1"], [1, 1, 1, 1], padding="SAME")
        conv = tf.add(conv, bias["b1"])
        conv = tf.nn.relu(conv)
        tran_conv = tf.layers.conv2d_transpose(conv,32, 4, 3, padding="valid")
        return tran_conv

    def train(self, input_img):
        plh = tf.placeholder(dtype=tf.float32, shape=(None, 84, 150, 3), name="input_img")

        with tf.variable_scope("test", reuse=tf.AUTO_REUSE):
            var_dict_1 = {
                "v1": tf.get_variable("v1", shape=(2, 2, 3, 32), initializer=tf.contrib.layers.xavier_initializer())
            }
            bias_1 = {
                "b1": tf.get_variable("b1", shape=32, initializer=tf.contrib.layers.xavier_initializer())
            }

        init = tf.global_variables_initializer()
        with tf.Session() as sess:
            sess.run(init)
            out_p = sess.run([self.__model_1(plh, var_dict_1, bias_1)], feed_dict={plh: [input_img]})
        return out_p


if __name__ == '__main__':
    obj = WeighsTest()
    img = cv2.imread('./1.jpg')
    output = obj.train(img)

回溯如下

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/tensorflow_core/python/client/session.py", line 1365, in _do_call
    return fn(*args)
  File "/usr/local/lib/python3.7/dist-packages/tensorflow_core/python/client/session.py", line 1350, in _run_fn
    target_list, run_metadata)
  File "/usr/local/lib/python3.7/dist-packages/tensorflow_core/python/client/session.py", line 1443, in _call_tf_sessionrun
    run_metadata)
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value conv2d_transpose/bias
     [[{{node conv2d_transpose/bias/read}}]]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/strange/DEV/Python_Projects/slmv/testing_unit.py", line 43, in <module>
    output = obj.train(img)
  File "/home/strange/DEV/Python_Projects/slmv/testing_unit.py", line 36, in train
    out_p = sess.run([self.__model_1(x1, var_dict_1, bias_1)], feed_dict={x1: [input_img]})
  File "/usr/local/lib/python3.7/dist-packages/tensorflow_core/python/client/session.py", line 956, in run
    run_metadata_ptr)
  File "/usr/local/lib/python3.7/dist-packages/tensorflow_core/python/client/session.py", line 1180, in _run
    feed_dict_tensor, options, run_metadata)
  File "/usr/local/lib/python3.7/dist-packages/tensorflow_core/python/client/session.py", line 1359, in _do_run
    run_metadata)
  File "/usr/local/lib/python3.7/dist-packages/tensorflow_core/python/client/session.py", line 1384, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value conv2d_transpose/bias
     [[node conv2d_transpose/bias/read (defined at usr/local/lib/python3.7/dist-packages/tensorflow_core/python/framework/ops.py:1748) ]]

Original stack trace for 'conv2d_transpose/bias/read':
  File "home/strange/DEV/Python_Projects/slmv/testing_unit.py", line 43, in <module>
    output = obj.train(img)
  File "home/strange/DEV/Python_Projects/slmv/testing_unit.py", line 36, in train
    out_p = sess.run([self.__model_1(x1, var_dict_1, bias_1)], feed_dict={x1: [input_img]})
  File "home/strange/DEV/Python_Projects/slmv/testing_unit.py", line 10, in __model_1
    tran_conv = tf.layers.conv2d_transpose(conv,32, 4, 3, padding="valid")
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/util/deprecation.py", line 324, in new_func
    return func(*args, **kwargs)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/layers/convolutional.py", line 1279, in conv2d_transpose
    return layer.apply(inputs)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/util/deprecation.py", line 324, in new_func
    return func(*args, **kwargs)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/keras/engine/base_layer.py", line 1700, in apply
    return self.__call__(inputs, *args, **kwargs)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/layers/base.py", line 548, in __call__
    outputs = super(Layer, self).__call__(inputs, *args, **kwargs)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/keras/engine/base_layer.py", line 824, in __call__
    self._maybe_build(inputs)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/keras/engine/base_layer.py", line 2146, in _maybe_build
    self.build(input_shapes)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/keras/layers/convolutional.py", line 787, in build
    dtype=self.dtype)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/layers/base.py", line 461, in add_weight
    **kwargs)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/keras/engine/base_layer.py", line 529, in add_weight
    aggregation=aggregation)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/training/tracking/base.py", line 712, in _add_variable_with_custom_getter
    **kwargs_for_getter)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/variable_scope.py", line 1500, in get_variable
    aggregation=aggregation)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/variable_scope.py", line 1243, in get_variable
    aggregation=aggregation)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/variable_scope.py", line 567, in get_variable
    aggregation=aggregation)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/variable_scope.py", line 519, in _true_getter
    aggregation=aggregation)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/variable_scope.py", line 933, in _get_single_variable
    aggregation=aggregation)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/variables.py", line 258, in __call__
    return cls._variable_v1_call(*args, **kwargs)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/variables.py", line 219, in _variable_v1_call
    shape=shape)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/variables.py", line 197, in <lambda>
    previous_getter = lambda **kwargs: default_variable_creator(None, **kwargs)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/variable_scope.py", line 2519, in default_variable_creator
    shape=shape)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/variables.py", line 262, in __call__
    return super(VariableMetaclass, cls).__call__(*args, **kwargs)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/variables.py", line 1688, in __init__
    shape=shape)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/variables.py", line 1872, in _init_from_args
    self._snapshot = array_ops.identity(self._variable, name="read")
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/util/dispatch.py", line 180, in wrapper
    return target(*args, **kwargs)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/array_ops.py", line 203, in identity
    ret = gen_array_ops.identity(input, name=name)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/gen_array_ops.py", line 4239, in identity
    "Identity", input=input, name=name)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/framework/op_def_library.py", line 794, in _apply_op_helper
    op_def=op_def)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/util/deprecation.py", line 507, in new_func
    return func(*args, **kwargs)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/framework/ops.py", line 3357, in create_op
    attrs, op_def, compute_device)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/framework/ops.py", line 3426, in _create_op_internal
    op_def=op_def)
  File "usr/local/lib/python3.7/dist-packages/tensorflow_core/python/framework/ops.py", line 1748, in __init__
    self._traceback = tf_stack.extract_stack()

将偏差和权重作为参数传递给模型很重要。
我使用 tensorflow-cpu 1.15.2 作为模型。
知道如何解决这个问题吗?
谢谢

【问题讨论】:

    标签: python tensorflow deep-learning neural-network conv-neural-network


    【解决方案1】:

    使用tf.global_variabels_initializer()之前需要调用的模型 IE。 train 函数更改如下

    def train(self, input_img):
            plh = tf.placeholder(dtype=tf.float32, shape=(None, 84, 150, 3), name="input_img")
    
            with tf.variable_scope("test", reuse=tf.AUTO_REUSE):
                var_dict_1 = {
                    "v1": tf.get_variable("v1", shape=(2, 2, 3, 32), initializer=tf.contrib.layers.xavier_initializer())
                }
                bias_1 = {
                    "b1": tf.get_variable("b1", shape=32, initializer=tf.contrib.layers.xavier_initializer())
                }
    
            """model is called before variable initialization"""
    
            model = self.__model_1(plh, var_dict_1, bias_1)
    
            init = tf.global_variables_initializer()
            with tf.Session() as sess:
                sess.run(init)
                out_p = sess.run([model], feed_dict={plh: [input_img]})
            return out_p
    
    

    下面给出的行:

    out_p = sess.run([self.__model_1(plh, var_dict_1, bias_1)], feed_dict={plh: [input_img]})
    

    改为

    out_p = sess.run([model], feed_dict={plh: [input_img]})
    

    【讨论】:

      猜你喜欢
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 2019-02-13
      • 1970-01-01
      • 2019-02-17
      • 2019-08-16
      • 1970-01-01
      相关资源
      最近更新 更多