今天老师带领我们入门TensorFlow2.0。至于tensorflow2.0是啥嘛,详细的可以度娘一下。我简述一下,就是一个end-to-end machine-Learning open source plantform(端对端的开源机器学习的平台)。学习tensorflow需要引入tensor这个概念,tensor的汉语意思就是张量。张量是数学和力学的概念,是矢量的延伸,矢量是一阶张量,至于张量具体是什么大家感兴趣就度娘吧,我也不是专业的数学研究人员不很懂。tensorflow1.0引入了deferred execution(延迟执行)机制,在构建阶段是不执行计算操作的,因此称为静态图,要想执行计算操作,需要创建Session()对象才可以执行计算操作。而在tensorflow2.0里引入了默认执行eager execution机制,无需首先创建静态图,可以立刻执行计算操作,并返回结果,不像1.0那样需要创建Session对象。但是动态图执行效率不高,不利于后期调试。但是可以在程序调试阶段使用动态图,快速建立模型、调试程序;在部署阶段,采用静态图机制,从而提高模型的性能和部署能力。tensorflow2.0清理和整合API,将tf.keras作为构建和训练模型的标准API。
安装tensorflow这个老生常谈了。
pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple
我们来简单入门讲讲tensorflow。它可以运行在GPU、CPU、嵌入式等等平台。你可以理解为是对numpy的二次封装,对numpy进行加速运算。numpy只能在CPU里计算,而tensorFlow可以在CPU、GPU、TPU里计算。当tensorflow与numpy一起在CPU里计算时,它们共享同一段内存。
它的基本运算是张量,张量是由Tensor实现,每个张量都是一个Tensor对象。可以使用tf.constant() 函数来创建张量。代码如下:
import tensorflow as tfa = tf.constant([[1,2],[3,4]])print(a)
- value:可以是数字或python列表或numpy数组
- shpae:张量的形状
- dtype:元素数据类型
dtype:全称是digital type汉语意思就是数字类型。这就创建了一个二维张量。
运行结果就是:
tf.Tensor([[1 2] [3 4]], shape=(2, 2), dtype=int32)
张量还可以使用Numpy方法,代码如下:
a = tf.constant([[1,2],[3,4]])print(a.numpy)print(type(a))
那么运行结果就是:
>
使用numpy方式生成张量时需要注意以下几点:numpy方法创建张量 使用np创建浮点数组时默认64位,而tensorflow默认时float32,但是tensorflow接受时自动转为64位浮点。一般建议使用np创建数组时建议为float32位足以使用。但是不建议低精度兼容高精度,因为会溢出。比如int32去兼容int64可能会存在溢出。
它的内置API非常多:
- cast()改变张量的数据类型,tensor支持转变的数据类型有:string int float bool。
- tf.convert_to_tensor()函数其他数据类型转换成tensor类型
- tf.fill()在tensor张量里自动填充某个元素,第一个参数是shape,第二个是value,根据传入的value自动判断数据类型
- tf.constant()也可以实现fill一样的功能,只不过它的填充数字在前面,shape参数位于后面。
- tf.random.normal(形状,均值,标准差,数据类型=tf.float32)这个是正态分布函数。均值即为:mean。标准差是:stddev。当mean=0,stddev=1为标准正态分布
- tf.random.truncated_normal()创建随机数张量。截断正态分布,基本参数一致。截断的依据是正态分布的2倍标准差。
- tf.random.set_seed()函数。设置随机数种子
- tf.random.uniform(shape,minval,maxval,dtype)函数。功能是均匀分布张量,它是一个左闭右开的区间。tf.random.uniform(shape,minval,maxval,dtype='int32')
- tf.random.shuffle()函数。功能是随机打乱序列。
- tf.range()创建整数序列,是左闭右开区间。
还可以使用字典式访问tensor对象属性,依次取出ndim、shape、dtype属性,代码如下:
atfc = tf.constant([[3,5],[7,0]])print('ndim:',atfc.ndim)print('shape:',atfc.shape)print('dtype:',atfc.dtype)
总结一下:tensorflow所有的运算都是在张量之间运行的。而numpy只是作为input和output使用的。我只是列举了常用的API,大家有兴趣的可以尝试尝试。
我始终保持开放的态度学习python,大佬可以批评指正。python之路漫漫,吾将上下而求索。