tensorflow变量初始化问题解决办法

在tensorflow中,所有变量都需要初始化才可以使用,其中也包括所定义的函数中的变量,错误示例如下:

#!/usr/bin/env python
# encoding: utf-8
'''
@author: 陆博文
@license: 陆博文私人版权所有
@contact: [email protected]
@software: pycharm2018.3.2
@file: tt.py
@time: 18-12-29 下午4:53

'''
import tensorflow as tf
import numpy as np


# 建立添加层函数,函数参数包含输入input,输入特征维度input_size,输出维度output_size,和激励函数activation_function()
def add_layer(input, input_size, output_size, activation_function=None):
    # 定义权重
    Weights = tf.Variable(tf.random_normal([input_size, output_size]))
    # 定义偏置
    biases = tf.Variable(tf.zeros([1, output_size]) + 0.1)
    # 矩阵运算
    wx_plus_b = tf.matmul(input, Weights) + biases
    # 选择输出
    if activation_function is None:
        output = wx_plus_b
    else:
        output = activation_function(wx_plus_b)
    return output

# 准备数据
x = tf.constant([[1, 2, 3, 4]], tf.float32)
init = tf.global_variables_initializer()

# 定义第一层网络
l0 = add_layer(x, 4, 2, activation_function=None)

with tf.Session() as sess:
    sess.run(init)
    print(sess.run(l0))

运行如下:

/home/lbw/桌面/python_env/py3env/bin/python3 /home/lbw/桌面/python_pro/tt.py
2019-01-02 10:16:12.249005: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
Traceback (most recent call last):
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1334, in _do_call
    return fn(*args)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1319, in _run_fn
    options, feed_dict, fetch_list, target_list, run_metadata)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1407, in _call_tf_sessionrun
    run_metadata)
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value Variable
	 [[{{node Variable/read}} = Identity[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](Variable)]]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/lbw/桌面/python_pro/tt.py", line 41, in <module>
    print(sess.run(l0))
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 929, in run
    run_metadata_ptr)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1152, in _run
    feed_dict_tensor, options, run_metadata)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1328, in _do_run
    run_metadata)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1348, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value Variable
	 [[node Variable/read (defined at /home/lbw/桌面/python_pro/tt.py:19)  = Identity[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](Variable)]]

Caused by op 'Variable/read', defined at:
  File "/home/lbw/桌面/python_pro/tt.py", line 37, in <module>
    l0 = add_layer(x, 4, 2, activation_function=None)
  File "/home/lbw/桌面/python_pro/tt.py", line 19, in add_layer
    Weights = tf.Variable(tf.random_normal([input_size, output_size]))
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 183, in __call__
    return cls._variable_v1_call(*args, **kwargs)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 146, in _variable_v1_call
    aggregation=aggregation)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 125, in <lambda>
    previous_getter = lambda **kwargs: default_variable_creator(None, **kwargs)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/ops/variable_scope.py", line 2444, in default_variable_creator
    expected_shape=expected_shape, import_scope=import_scope)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 187, in __call__
    return super(VariableMetaclass, cls).__call__(*args, **kwargs)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 1329, in __init__
    constraint=constraint)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/ops/variables.py", line 1491, in _init_from_args
    self._snapshot = array_ops.identity(self._variable, name="read")
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/ops/array_ops.py", line 81, in identity
    return gen_array_ops.identity(input, name=name)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/ops/gen_array_ops.py", line 3454, in identity
    "Identity", input=input, name=name)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 787, in _apply_op_helper
    op_def=op_def)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py", line 488, in new_func
    return func(*args, **kwargs)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 3274, in create_op
    op_def=op_def)
  File "/home/lbw/桌面/python_env/py3env/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 1770, in __init__
    self._traceback = tf_stack.extract_stack()

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value Variable
	 [[node Variable/read (defined at /home/lbw/桌面/python_pro/tt.py:19)  = Identity[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](Variable)]]


Process finished with exit code 1

注意,这里报错 Attempting to use uninitialized value Variable(试图使用未初始化的值变量),是因为在源代码中,我将变量初始化过程init放在了l0之前,导致了定义的函数add_layer中的Weights和biases没有得到初始化,只需要将init过程放到l0之后就可以了。如下:

#!/usr/bin/env python
# encoding: utf-8
'''
@author: 陆博文
@license: 陆博文私人版权所有
@contact: [email protected]
@software: pycharm2018.3.2
@file: tt.py
@time: 18-12-29 下午4:53

'''
import tensorflow as tf
import numpy as np


# 建立添加层函数,函数参数包含输入input,输入特征维度input_size,输出维度output_size,和激励函数activation_function()
def add_layer(input, input_size, output_size, activation_function=None):
    # 定义权重
    Weights = tf.Variable(tf.random_normal([input_size, output_size]))
    # 定义偏置
    biases = tf.Variable(tf.zeros([1, output_size]) + 0.1)
    # 矩阵运算
    wx_plus_b = tf.matmul(input, Weights) + biases
    # 选择输出
    if activation_function is None:
        output = wx_plus_b
    else:
        output = activation_function(wx_plus_b)
    return output

# 准备数据
x = tf.constant([[1, 2, 3, 4]], tf.float32)

# 定义第一层网络
l0 = add_layer(x, 4, 2, activation_function=None)

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    print(sess.run(l0))

运行如下:

/home/lbw/桌面/python_env/py3env/bin/python3 /home/lbw/桌面/python_pro/tt.py
2019-01-02 10:29:23.163019: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
[[3.4318833 2.0584557]]

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/qq_38226778/article/details/85600403