一 、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
?? ---------------知识源于实践,行动丰富大脑
-