初学tensorflow,有点搞不懂 tensor和Variable的区别,经过思考,得到以下总结!


目录

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;


参考文献:https://www.tensorflow.org/programmers_guide/variables 

                 https://www.tensorflow.org/api_docs/python/tf/Variable