当前课程知识点:计算思维与人工智能基础 > 第三部分:python基础 > 第九章:TensorFlow基础 > 9.5.TensorFlow中常用操作
下面我们给大家介绍一下
TensorFlow代码执行时设备的选择和设置
设备呢
在这里只是一块可以用来运算
并且拥有自己地址空间的硬件
比如说CPU和GPU
那TensorFlow为了在执行操作的时候
充分利用计算资源
可以明确的指定操作在哪一个设备上执行
一般的情况下
我们不需要显示的指定使用CPU还是GPU
TensorFlow会自动检测
如果检测到GPU呢
TensorFlow会尽可能的利用第一个GPU来执行操作
那么需要注意的是
如果机器上有超过一个可用的GPU
那么除了第一个外
其他的GPU默认是不参与计算的
所以在实际的TensorFlow编程中
经常需要明确给定使用的CPU和GPU
我们看这两段代码
我们通过with tf.device
那么来去指定/CPU
那么CPU的时候我们统一用CPU0
也可以在GPU上运行
我们就可以选择使用什么GPU:0
那么这个里面的可能是0,1
如果不是一块GPU的时候呢
我们就可以通过后面的0,1来进行区分
那么对于CPU呢
他是不区分设备号的
都统一使用CPU:0来去设定
另外的话
我们可以通过这两段代码
来去分别来设置它在不同的设备上运行
我们首先来看这段
上面这段代码
我们通过import os用来指定os.environ里面的
这两个参数啊
那么来设定
上面这种设置呢就是我们在CPU上运行
那么下段代码呢
我们可以设置他的设备是0
那么就是在第0块的GPU上运行
那当然也可以设置为1
那么就在1块GPU上运行
那么这个地方所需要注意的是
你如果安装的是tensorflow CPU的版本呢
当然就没法指定运行环境了
那么有一些操作呢
是不会在GPU上运行的
这个大家在以后的使用的时候需要注意
另外在设置不同的设备上运行
我们主要的目的就是为了能够
并行提高我们的计算效率
下面我们给大家介绍一下TensorFlow的一些运算
主要给大家介绍三块
第一个是基本的操作
求导
还有一些我们神经网络的一些设置的一些运算
首先呢
基本的就是我们的数学的运算
那么可以有我们常用的加减乘除啊
以及赋值
平方
平方根指数
自然对数
这个地方我们可以看的到
这个TensorFlow用的这个函数
跟我们前面讲过的
numpy函数基本上是什么一样的
说我们这个
虽然它里面的执行的是有一些细微的区分的
但是我们从实用函数的角度来说
那么函数的名称
tf.constant那就是我们定义一个常量
常量那个canstant赋值给a
add是一个加法
在这个地方的我们可以看的到这个矩阵的相乘
那么用tf.matmul
比如说a和b两个矩阵进行相乘
也可以用a@b
他们和后面这个是等价的
TensorFlow给我们提供了一个自动求导的一个功能
那么这个呢是通过tf.Gradient Tape这个API来进行实现的
如果我们对一个变量求导呢
我们可以给他进行赋值
我们通过with tf.GradientTape来进行什么呀
来进行设置
我们这里面是我们的一个函数
然后通过他的gradient方法把
我们对这个W进行求导
那么输出的结果呢
一阶导数一阶导数的值
如果我们前面赋值的是一个什么呀
我们看这个前面赋值如果是一个常量的话
那么通过GradientTape来进行求导的时候
这时候呢我们需要什么呀
通过他的一个方法啊
tape.watch的这个方法
把它转换成一个什么
可监控的一个变量
然后呢我们再进行对它求导
那么他的结果呢跟上段代码呢是一样的啊
另外的话
我们还可以求什么呀啊
两节的导数啊
那么我们来看这段代码
我们X定义为一个什么呀
变量
然后我们有两层
第一层GradientTape
那么with第二层GradientTape
这是我们的一个函数
那么这个是我们求导那么一阶导数
我们也可以再求一次导二阶导数
那么可以看到一阶导数的结果
二阶导数的结果
这就是我们给大家提供的这个
GradientTape这个API的一个简单的一个应用
另外的话
他还提供一些神经网络的函数的一些应用
比如说我们的全连接
像我们这段这是一个全连接
在这里面是什么啊
神经元
输出
也提供一些什么呀
卷积层的卷积的函数
那么这是一个二维的一个什么呀
layers.Conv2D
那么这是一个二维的一个卷积
那么输入量
然后这是卷积核的大小
然后我们滑动的步长
然后这是我们在填补的时候的一种方式啊
那么在具体的时候
我们后面可以再介绍
另外的话
我们在神经网络里面常用到的激活函数
常用的sigmoid函数
那么它的函数的形式呢
数学表达式都是这样子的
我们可以看到他特点啊
如果x得0的时候呢
我们的什么呀
y的值是0.5
那么x趋于正无穷的时候
它的y是1
那么就在0到1之间的一个变化
那么TensorFlow提供的函数就tf.nn.sigmoid这样子的哦
还有一个Tanh函数
Tanh函数的数学表达式呢
是这样子
那么他的变化的我们可以看的到
当x得0的时候
那我们这个y的值是得0的
那么当x负无穷的时候
它是—1
正无穷的时候是1
它是在-1到正1之间一个变换
可以看到另外一个relu函数
也是我们常用的
那么relu函数可以看得到
x等于0的时候
它是0
x小于0时候它都是什么呀
0
那么大于0的时候就是x本身
那么这就是一个relu函数
那激活函数在我们神经网络的构建时会常用的
那我们根据实际的应用不同呢
就会选用不同的激活函数
另外一个就是我们的误差的计算
误差的计算我们前面给他讲过是均方差
那么均方差这个MSE提供的函数是tf.losses.MSE
那么在这个地方我们就不再介绍
还有一个就是我们的一个交叉熵
那么交叉熵其实是一个
就是我们实际的分布和预测的这个分部的
它的一个概率的一个统计
比如说我们可以让
交叉熵其实它的表达式是这样子的
那么这个交叉熵的的p呢
就是我们这个指的是我们实际标签的一个概率
那么这个里面的q呢
是我们的预测标签的概率
我们举一个简单的例子
比如说我们有一个分类的一个预测
那么分类里面有三个
有猫狗马
那么这个标签里面的如果是猫的话
他就会是0100是这样的一个表达
那么如果是我们预测出来的时候
它的值可能是这样0.2
0.7
0.1
那么这个预测啊
那它的误差是多少呢
我们就通过交叉熵
那么交叉熵去怎么计算的话
那么就可以看的到loss
那么里面这个就是我们前面的这个是我们的什么呀
标签的概率0 1 0
那么后面我们log后面
跟的是我们预测的概率log(0.2)
0.7
0.1
那么这个得到的值呢
就是一个交叉熵来衡量我们预测的一个准确度啊
预测的一个准确度
那么这个其实就是误差的一个计算啊
那在神经网络层里面会用到一些其他的一些函数
比如说我们的矩阵相乘的函数
刚才我们说卷积的函数
像我们的激活的函数
还有我们这个最大池化、sigmoid、softmax函数
那等等后面的这些的常用的这些神经网络函数呢
在下面的课程中
我们会继续给大家在应用的时候引入
那么关于这一章TsesorFlow的基础呢
就给大家介绍到这儿
-章测试
-章测试
-第一章:python简介
--章测试
-第二章:编码规范
--2.2常量和变量
--章测试
-第三章:数据类型
--章测试
-第四章:基本运算
--4.2比较运算符
--4.3逻辑运算符
--4.4位运算符
--章测试
-第五章:程序控制结构
--5.1顺序结构
--5.2条件结构
--5.3循环结构
--5.4跳转结构
--5.5异常处理
--章测试
-第六章:函数、模块与面向对象
--6.2面向对象
--6.4模块与包
--章测试
-第七章:文件操作
--7.2文件的写入
--章测试
-第八章:python生态库
--章测试
-第九章:TensorFlow基础
--章测试
-第十章:实例分析与实践
--章测试
-第十一章:人工智能在自然语言中的应用
--章测试