在tensorflow中,所有变量都需要初始化才可以使用,其中也包括所定义的函数中的变量,错误示例如下:
#!/usr/bin/env python
# encoding: utf-8
'''
@author: 陆博文
@license: 陆博文私人版权所有
@contact: 2287693887@qq.com
@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: 2287693887@qq.com
@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