一 、tensorflow=tensor(张量)+flow(流) (代码+演示)
1、tensor(张量)
1.1 定义:可以简单的理解为多维数组(CS角度),更加专业定义(1) ,更加形象化理(2).
CS角度:A tensor is a generalization of vectors andmatrices to potentially higher dimensions.
1)、形式上:表明了在tensorflow运算中运用了张量(tensor)这样的数据结构,所有的 数据通过张量表示。
2)、功能上:简单理解为多维数组(类比C/C++,python numpy)
0阶张量:理解表示标量(scalar),也就是一个具体数,注(也可以是字符串类型)。
1阶张量:理解表示向量(vector),也就是一维数组。
……
N阶张量:理解表示一个n维数组。
但是,不同之处在于:
1)、类似数组,但实现方式不是直接采用数组,而只是对Tensorflow运算结果的引用 2)、运算过程没有真正保存数字,保存的是计算数据的过程。
1.2 实践(实践是深刻体会知识的源泉)
1)、numpy ( in Python 3.6.4 Shell)
>>> import numpy as np
>>> a=np.array([1,2,3,4])
>>> aarray([1, 2, 3, 4]) ( 1)
>>> a.shape(4,)
>>> type(a)
<class 'numpy.ndarray'>
2)、tensorflow (in Python 3.6.4 Shell)
>>> import tensorflow as tf
>>> a =tf.constant([1.0,2.0],name = 'a')
>>> a
<tf.Tensor 'a:0' shape=(2,)dtype=float32> (2)
>>>b = tf.constant([5.0,6.0],name = 'b')
>>> result1 = a+b
>>> result2 =tf.add(a,b,name="add")
>>> result1
<tf.Tensor 'add_3:0' shape=(2,)dtype=float32>
>>> result2
<tf.Tensor 'add_4:0' shape=(2,)dtype=float32>
(3)注
1、从(1)和(2)对比,张量(tensor)可以类比为数组,可是又有和数组本质的不同。
2、从(2)可知,一个张量中有三个不同属性:名字(name),维度(shape)和类型(type),应 当理解,名字是这个张量的唯一标识符(也有表明当前张量的计算方式),维度不再说明,类比numpy。
3、类型重点说明,注意类型不匹配情况。
例子如下,
>>> c= tf.constant([3,4])
>>> c
<tf.Tensor 'Const:0' shape=(2,)dtype=int32>
>>> c+a
TypeError: Input 'y'of 'Add' Op has type float32 that does not match type int32 of argument 'x'. 主要还是表明类型不匹配。Tensorflow数据类型(3)4、+ 和tf.add() 等同
1.3 张量的使用
1)、对中间结果的引用,比如:
>>>consta = tf.constant([1,2,3,4],name='consta')
>>> constb =tf.constant([5,6,7,8],name='constb')
>>> consta
<tf.Tensor 'consta:0' shape=(4,)dtype=int32>
>>> result =consta+constb
>>>result=tf.constant([1,2,3,4],name='consta')+tf.constant([5,6,7,8],name='constb')
1) 对于黑体而言,前者代码可阅读性更高。
2)计算图构造完成后,张量可以获得计算的真正数据。
>>>tf.Session().run(result)array([ 6, 8, 10, 12])
2、flow(流):直观表达张量之间相互转化过程。
参考文章
(1)、张量维基百科
(2)、知乎回答
(3)、TensorFlow官网
(4)、《TensorFlow 实战Google深度学习框架》
2018/12/29
---------------知识源于实践,行动丰富大脑
-
网友评论