初学tensorflow,有点搞不懂 tensor和Variable的区别,经过思考,得到以下总结!
目录
Tensor
import tensorflow as tf
x = tf.random_uniform([3,3]) #创建一个Tensor
with tf.Session() as sess:
print(type(x))
y = sess.run(x)
print(type(y)) #y是一个numpy.ndarray
print(y)
sess.close()
输出: <class 'tensorflow.python.framework.ops.Tensor'>
<class 'numpy.ndarray'>
[[0.69635034 0.01574457 0.10151494]
[0.22572029 0.58939755 0.6667918 ]
[0.12261796 0.6142607 0.7017566 ]]
Variable
import tensorflow as tf
a = tf.Variable(tf.random_uniform([3,3]))
with tf.Session() as sess_2:
init_op = tf.initialize_all_variables()
sess_2.run(init_op)
print(type(a))
print(sess_2.run(a))
sess_2.close()
输出: <class 'tensorflow.python.ops.variables.Variable'>
[[0.68190384 0.48186898 0.5836265 ]
[0.7770786 0.28783894 0.60949016]
[0.5110326 0.1956842 0.12324178]]
注意:在TensorFlow中,变量的定义和初始化是分开的,所有关于图变量的赋值和计算都要通过tf.Session的run来进行。想要将所有图变量进行集体初始化时应该使用tf.global_variables_initializer。
总结
Variable和Tensor之间的区别:
1. Variable是可更改的,而Tensor是不可更改的,比如:Tensor不具有assign函数,而Variable含有;
2. Variable用于存储网络中的权重矩阵等变量,而Tensor更多的是中间结果等;
3. Variable是会显示分配内存空间的,需要初始化操作(assign一个tensor),由Session管理,可以进行存储、读取、更改等操作。相反地,诸如Const, Zeros等操作创造的Tensor,是记录在Graph中,所以没有单独的内存空间;而其他未知的由其他Tensor操作得来的Tensor则是只会在程序运行中间出现;
4.tensor和Variable产生的方式也有所不同;
5. Tensor可以使用的地方,几乎都可以使用Variable;