【深度学习】嘿马深度学习系统性知识教程第3篇:深度学习进阶,2.1 多分类与TensorFlow【附代码文档】
教程总体简介:在职高新课-深度学习、1.1 深度学习介绍、深度学习与神经网络、1.2 神经网络基础、循环神经网络、4.2 词嵌入与NLP、4.3 seq2seq与Attention机制、总结、每日作业、5.1 生成对抗网络(GAN)、高级主题、5.2 自动编码器、5.3 CapsuleNet(了解)、1.3 浅层神经网络、1.4 深层神经网络、深度学习进阶、2.1 多分类与TensorFlow、2.2 梯度下降算法改进、2.3 深度学习正则化、2.4 BN与神经网络调优、2.5 总结、2.6 每日作业、卷积神经网络、3.1 图像数据与边缘检测、3.2 卷积神经网络(CNN)原理、3.3 经典分类网络结构、3.5 CNN网络实战技巧、4.1 循环神经网络
https://bbs.huaweicloud.com/blogs/454418
全套教程部分目录:
深度学习进阶
|
|
2.1 多分类与TensorFlow
学习目标
-
目标
-
知道softmax回归的原理
- 应用softmax_cross_entropy_with_logits实现softamx以及交叉熵损失计算
-
应用matmul实现多隐层神经网络的计算
-
应用
-
应用TensorFlow完成Mnist手写数字势识别
到目前为止,我们所接触的都是二分类问题,神经网络输出层只有一个神经元,表示预测输出y^\hat{y}y^P(y=1∣x),y^>0.5{P}(y=1|x), \hat{y} > {0.5}P(y=1∣x),y^>0.5
2.1.1 Softmax 回归
对于多分类问题,用 N表示种类个数,那么神经网络的输出层的神经元个数必须为L[output]=N, 每个神经元的输出依次对应属于N个类别当中某个具体类别的概率,即P(y=N1∣x),..,P(y=Nn∣x)P(y=N_1|x),..,P(y=N_n|x)P(y=N1∣x),..,P(y=Nn∣x)
输出层即:
Z[L]=W[L]a[L−1]+b[L]Z^{[L]} = W^{[L]}a^{[L-1]} + b^{[L]}Z[L]=W[L]a[L−1]+b[L]
需要对所有的输出结果进行一下softmax公式计算:
ai[L]=eZi[L]∑i=1CeZi[L]a^{[L]}i = \frac{e^{Z^{[L]}_i}}{\sum^Ce^{Z^{[L]}i}}ai[L]=∑i=1CeZi[L]eZi[L]∑i=1Cai[L]=1\sum^Ca^{[L]}_i = 1∑i=1Cai[L]=1
2.1.2 交叉熵损失
对于softmax回归(逻辑回归代价函数的推广,都可称之为交叉熵损失),它的代价函数公式为:
L(y^,y)=−∑j=1Cyjlogy^jL(\hat y, y) = -\sum^C_{j=1}y_jlog\hat y_jL(y^,y)=−∑j=1Cyjlogy^j
总损失函数可以记为J=1m∑i=1mL(y^,y)J = \frac{1}{m}\sum^m_{i=1}L(\hat y, y)J=m1∑i=1mL(y^,y)
逻辑回归的损失也可以这样表示,:
所以与softmax是一样的,一个二分类一个多分类衡量。
对于真实值会进行一个one-hot编码,每一个样本的所属类别都会在某个类别位置上标记。
上图改样本的损失值为:
0log(0.10)+0log(0.05)+0log(0.15)+0log(0.10)+0log(0.05)+0log(0.20)+1log(0.10)+0log(0.05)+0log(0.10)+0log(0.10)0log(0.10)+0log(0.05)+0log(0.15)+0log(0.10)+0log(0.05)+0log(0.20)+1log(0.10)+0log(0.05)+0log(0.10)+0log(0.10)0log(0.10)+0log(0.05)+0log(0.15)+0log(0.10)+0log(0.05)+0log(0.20)+1log(0.10)+0log(0.05)+0log(0.10)+0log(0.10)
注:关于one_hot编码
框架使用
-
便于编程:包括神经网络的开发和迭代、配置产品;
-
运行速度:特别是训练大型数据集时;
目前最火的深度学习框架大概是 Tensorflow 了。Tensorflow 框架内可以直接调用梯度下降算法,极大地降低了编程人员的工作量。例如以下代码:
2.1.3 案例:Mnist手写数字识别神经网络实现
2.1.3.1 数据集介绍
文件说明:
- train-images-idx3-ubyte.gz: training set images (9912422 bytes)
- train-labels-idx1-ubyte.gz: training set labels (28881 bytes)
- t10k-images-idx3-ubyte.gz: test set images (1648877 bytes)
- t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes)
网址:[
2.1.3.2 特征值
2.1.3.3 目标值
2.1.3.4 Mnist数据获取API
TensorFlow框架自带了获取这个数据集的接口,所以不需要自行读取。
-
from tensorflow.examples.tutorials.mnist import input_data
-
mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
- mnist.train.next_batch(100)(提供批量获取功能)
- mnist.train.images、labels
- mnist.test.images、labels
2.1.3.5 网络设计
我们采取两个层,除了输入层之外。第一个隐层中64个神经元,最后一个输出层(全连接层)我们必须设置10个神经元的神经网络。
2.1.3.6 全连接层计算
-
tf.matmul(a, b,name=None)+bias
-
return:全连接结果,供交叉损失运算
-
tf.train.GradientDescentOptimizer(learning_rate)
-
梯度下降
- learning_rate:学习率
-
method:
- minimize(loss):最小优化损失
2.1.3.7 前期确定事情与流程
-
确定网络结构以及形状
-
第一层参数:输入:x [None, 784] 权重:[784, 64] 偏置[64],输出[None, 64]
-
第二层参数:输入:[None, 64] 权重:[64, 10] 偏置[10],输出[None, 10]
-
流程:
-
获取数据
- 前向传播:网络结构定义
- 损失计算
-
反向传播:梯度下降优化
-
功能完善
-
准确率计算
- 添加Tensorboard观察变量、损失变化
- 训练模型保存、模型存在加载模型进行预测
2.1.3.8 主网络搭建流程
- 获取数据
|
|
- 定义数据占位符,Mnist数据实时提供给placeholder
|
|
- 两层神经元网络结果计算
|
|
- 损失计算与优化 ```python
3、softmax回归以及交叉熵损失计算
|
|
- 点赞
- 收藏
- 关注作者
评论(0)