神经网络week2
1.1 Tensorflow实现
例子:手写数字识别
BinaryCrossentropy是分类交叉熵
1.要求Tensorflow将神经网络这三层串在一起;
2.让Tensorflow编译模型,指定要使用的最后一个函数是什么;
3.调用fit函数,告诉Tensorflow在步骤1中使用在步骤2中指定的最后一个成本函数对数据集XY进行了指定。
epochs表示可能想要运行多少步来创建下降
1.2 模型训练细节
训练一个模型来做二分类,神经网络的训练分为三步
-
定义模型(指定如何在给定输入特征x和参数w、b的情况下计算输出)
-
定义损失函数
-
优化损失函数(使用梯度下降法)去最小化成本函数 J
2.1 Sigmoid激活函数
如果不用激活函数,神经网络相当于一个线性函数
常用的激活函数:
2.2如何选择激活函数
二分类问题选择Sigmoid函数
回归问题:y可取正取负,线性激活函数;y只能取非负,ReLU(较常用,计算速度快;只有左边是平的,所以收敛速度快)
隐藏层中可以使用relu来尽可能准确的保留特征,只要最后的输出时再使用sigmoid方法,输出就会是一个0或1
为什么不用sigmoid?
因为sigmoid两头都是平的,做梯度下降的时候参数的每次更新是减去参数的导数的,而当函数是接近水平的时候,导数是接近0的,这时候参数的更新会很慢。
3.1多分类问题
3.3神经网络的Softmax输出
多分类问题:输出很多分类的模型
例子:手写数字识别问题,需要从0到9的十个分类中选择正确的分类。
这个问题可以通过加一个10个神经元的输出层来解决。
模型会输出10个值z1到z10,我们需要把这10个值转化为概率。最直观的方法是取最大值,也就是说把最大的那个值设成1,其他值都设为0。Softmax可以解决数字模糊不定的问题,把每个值z变成
然后算出每一个在全体占的比例,即最终概率。
稀疏分类交叉熵损失函数
之所以是linear是因为下面设定为True之后,softmax不再单独计算,只在计算cost时嵌入内部一起算了。这样输出层只会输出Z的值,不再带入softmax计算了。 输出层只会输出Z的值,那么你测试集带入后也会输出Z的值,还要经过sigmoid,这样算出来的才是区间在[0,1]的概率。
3.2 Softmax
多分类模型的输出层可以用Softmax函数,是多分类分类上下文的二进制分类算法。
Softmax回归公式:
如何指定Softmax回归的成本函数
loss=-logaj if y=j
aj越小损失越大
3.4多标签分类
同时输出多个标签的分类叫多标签分类
比如我们要从图片里检测三个物体,最终模型输出的是一个有三个数字的矩阵,每个数字表示该物体是否存在。
对于这种任务,做法为同时做3个二分类
把输出层设置为3个神经元,激活函数为sigmoid,结果就是三个数字,每个数字代表该物体存在的概率。