目录
前言
P42-P48
神经元和大脑
神经网络中的层
更复杂的神经网络
前向传播(做出预测)
P49-P53
代码中的推理
构建一个神经网络
P54-P60
矩阵乘法
TensorFlow框架实现神经网络
前言
这是吴恩达机器学习笔记的第三篇,第二篇笔记请见:
吴恩达机器学习全课程笔记第二篇
完整的课程链接如下:
吴恩达机器学习教程(bilibili)
推荐网站:
scikit-learn中文社区
吴恩达机器学习资料(github)
P42-P48
神经元和大脑
神经网络的历史
根据大脑的神经元,类比出简化的神经元模型
即使做了简单的类比,我们并不能知道人的大脑是如何工作的,我们也并不需要把生物动机看得太过重要
为什么现在又把神经网络看得如此重要?
传统的ai算法比如线性回归、逻辑回归,不能充分使用数据集,如果能训练一个非常大的神经网络,同时利用已经拥有的大量数据,就可以在从语音识别到图像识别的任何事情上获得性能
一个简单的需求预测实例:x输入到神经元当中得到其畅销的概率,这是一个简化的神经元模型
在上面的基础之上,看一个更加复杂的例子:
可以看出神经网络分为输入层、隐藏层和输出层,每一层都可以有多个神经元
一个神经网络可能有多个隐藏层,如下所示:
下面介绍一个图像识别的例子,对于一个图像,将其像素组合成一个向量,输入到神经网络中,经过多个隐藏层,最后可以输出此人是谁
当你观察隐藏层不同层神经元的时候,找出它们可能再计算什么,比如第一层中,第一个神经元在寻找一条垂直线,第二个神经元寻找像这样的定向先或定向边缘,第三个神经元在那个方向寻找一条线,以此类推
对于下一层隐藏层,你会发现这些神经元可能会将许多小的短线组合在一起,以便寻找面部的部分
神经网络中的层
如何构建神经网络中的一个层?
让我们放大隐藏层来看它的计算,在这个隐藏层中输入四个数字,隐藏层中的三个神经元中每一个都只是执行一个小的逻辑回归单元
右上边方框号表的数字1指的是与神经网络第一层相关的数量
第二层的输入时第一层的输出
在计算出一个之后,你可以选择执行或不执行最后一个可选步骤,取决于你是否正在进行的是二进制预测
更复杂的神经网络
下面是一个四层的神经网络:
放大第三层隐藏层,一定要注意好每个符号上下标所代表的的含义
前向传播(做出预测)
以书写数字识别为例,区分数字0和1(二进制分类问题)
前向传播简单理解就是将上一层的输出作为下一层的输入,并计算下一层的输出,一直到运算到输出层为止
P49-P53
代码中的推理
以咖啡烘焙为例,要控制的参数有温度和时间
我们将这个数据以张量的形式输入网络
在代码中,我们将输入x设置为两个数的数组,建立隐藏层一,随后建立第二层,将tensorflow(张量流)x向前传播,最后输出
之前说过的那个识别手写数字的代码同理:
numpy中表示数据的方式之间存在一些不一致之处,下面让我们学习tenorflow如何表示数据
矩阵用numpy数组的表示
两种表示矩阵的方法,tensor也可以向array发生转换
构建一个神经网络
通过Sequential把不同层连接起来
对于手写数字识别的列子也是同理:
在一个单层中的向前传播的具体代码如下
如果把具体的层信息和sequential封装起来,就可以写成如下形式,这也是前向传播在python中的常见写法
P54-P60
AI的分类
神经网络中for循环和矢量化的代码对比:
矩阵乘法
向量点乘
矩阵乘法
如何在代码中实现矩阵乘法?
回到前面dense layer的例子,上面的矩阵乘法的原理解释了为什么dense layer的代码可以那样去写
TensorFlow框架实现神经网络
上面都是python的代码,下面展示如何在tensorflow框架中训练神经网络
总结起来的话,就是三个步骤:
1.指定告诉tensorflow的模型,如何计算推理
2.使用特定的损失函数编译模型
3.训练模型
这段代码背后发生了什么?
根据前面所学的知识,逐步解析如下图所示: