【深度学习】嘿马深度学习笔记第3篇:TensorFlow介绍,1.2 神经网络基础【附代码文档】
教程总体简介:要求 目标 1.1 深度学习与机器学习的区别 学习目标 1.1.1 区别 1.1.1.1 特征提取方面 1.1.2 算法代表 深度学习的应用场景 1.2 深度学习框架介绍 1.2.2 TensorFlow的特点 深度学习介绍 2.1 TF数据流图 2.1.1 案例:TensorFlow实现一个加法运算 2.2 图与TensorBoard 2.2.1 什么是图结构 2.2.2 图相关操作 1 默认图 2 创建图 2.2.4 OP 2.2.4.2 指令名称 2.3 会话 卷积神经网络 2.5 CNN网络实战技巧 3.1 迁移学习案例 3.1.1 案例:基于VGG对五种图片类别识别的迁移学习 3.1.1.2 数据集以及迁移需求 3.1.1.3 思路和步骤 3.1.1.4 训练的时候读取本地图片以及类别 假定最后一层CNN的层输出为(None, 8, 8, 2048) 取每一个特征图的平均值作为输出,用以替代全连接层 100为类别 在__init__中添加 1.1 项目演示 1.2 开发环境搭建 3.2 目标检测任务描述 3.2.4 目标定位的简单实现思路 商品物体检测项目介绍 3.3 R-CNN 3.3.1 目标检测-Overfeat模型 3.3.7 问题? 3.3.8 SPPNet 3.5 Faster R-CNN 3.5.2 RPN原理 3.5.4 效果对比 YOLO与SSD 3.6 YOLO(You only look once) 3.6.1 YOLO 3.6.2 单元格(grid cell) 3.6.3 非最大抑制(NMS) 3.6.4 训练 3.7 SSD(Single Shot MultiBox Detector) 3.7.1 SSD 问题:SSD中的多个Detector & classifier有什么作用? 3.7.2 训练与测试流程 SSD网络接口实现 4.3 案例:SSD进行物体检测 4.3.1 案例效果 4.3.3 步骤分析以及代码 循环读取图片进行多个图片输出检测 预测 定义BBox工具 使用非最大抑制算法过滤 5.1 项目训练结构介绍 5.1.1 项目目录结构 商品检测数据集训练 5.2 标注数据读取与存储 5.2.1 案例:xml读取本地文件存储到pkl 5.2.1.1 解析结构 one_hot编码函数 5.3 训练 5.3.3 多GPU训练代码修改 5.4 本地预测测试 5.4.1 预测代码 5.6 Web与模型服务对接逻辑 5.5 模型导出 5.4.1 keras 模型进行TensorFlow导出 Docker部署环境使用介绍 5.7 TF Serving 与 Web开启服务 4.8.2 安装Tensorflow Serving 5.7.2 案例操作:commodity模型服务运行 TensorFlow Client对接模型服务 Web Server开启 模型导出与部署 2.4 张量 2.4.1 张量(Tensor) 2.4.1.1 张量的类型 2.4.4 张量的数学运算 2.5 变量OP 2.5.1 创建变量 2.5.2 使用tf.variable_scope()修改变量的命名空间 2.7 案例:实现线性回归 2.7.1 线性回归原理复习 2.7.3 增加其他功能 2 增加命名空间 3 模型的保存与加载 4 命令行参数使用 完整代码 1.2 神经网络基础 tf.keras介绍 神经网络与tf.keras 1.4 深层神经网络 3.1 卷积神经网络(CNN)原理 2.2案例:CIFAR100类别分类 2.2.2 API 使用 2.2.3 步骤分析以及代码实现(缩减版LeNet5) 2.2 梯度下降算法改进 2.4 经典分类网络结构 2.4.6 案例:使用pre_trained模型进行VGG预测
完整笔记资料代码:https://gitee.com/yinuo112/AI/tree/master/深度学习/嘿马深度学习笔记/note.md
感兴趣的小伙伴可以自取哦~
全套教程部分目录:
部分文件图片:
TensorFlow介绍
|
|
1.2 神经网络基础
学习目标
-
目标
-
知道逻辑回归的算法计算输出、损失函数
- 知道导数的计算图
- 知道逻辑回归的梯度下降算法
-
知道多样本的向量计算
-
应用
-
应用完成向量化运算
- 应用完成一个单神经元神经网络的结构
1.2.1 Logistic回归
1.2.1.1 Logistic回归
逻辑回归是一个主要用于二分分类类的算法。那么逻辑回归是给定一个x x xy^=P(y=1∣x) \hat{y}=P(y=1|x) y^=P(y=1∣x)
Logistic 回归中使用的参数如下:
e−ze^{-z}e−z
例如:
1.2.1.2 逻辑回归损失函数
损失函数(loss function)用于衡量预测结果与真实值之间的误差。最简单的损失函数定义方式为平方差损失:
L(y^,y)=12(y^−y)2 L(\hat{y},y) = \frac{1}{2}(\hat{y}-y)^2L(y^,y)=21(y^−y)2
逻辑回归一般使用L(y^,y)=−(ylogy^)−(1−y)log(1−y^)L(\hat{y},y) = -(y\log\hat{y})-(1-y)\log(1-\hat{y}) L(y^,y)=−(ylogy^)−(1−y)log(1−y^)
该式子的理解:
- 如果y=1,损失为−logy^- \log\hat{y}−logy^y^\hat{y} y^
- 如果y=0,损失为1log(1−y^)1\log(1-\hat{y})1log(1−y^)y^\hat{y}y^
损失函数是在单个训练样本中定义的,它衡量了在单个训练样本上的表现。代价函数(cost function)衡量的是在全体训练样本上的表现,即衡量参数 w 和 b 的效果,所有训练样本的损失平均值
J(w,b)=1m∑i=1mL(y^(i),y(i))J(w,b) = \frac{1}{m}\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)}) J(w,b)=m1∑i=1mL(y^(i),y(i))
1.2.2 梯度下降算法
目的:使损失函数的值找到最小值
方式:梯度下降
函数的梯度(gradient)指出了函数的最陡增长方向。梯度的方向走,函数增长得就越快。那么按梯度的负方向走,函数值自然就降低得最快了。模型的训练目标即是寻找合适的 w 与 b 以最小化代价函数值。假设 w 与 b 都是一维实数,那么可以得到如下的 J 关于 w 与 b 的图:
可以看到,成本函数 J 是一个凸函数,与非凸函数的区别在于其不含有多个局部最低。
参数w和b的更新公式为:
w:=w−αdJ(w,b)dww := w - \alpha\frac{dJ(w, b)}{dw}w:=w−αdwdJ(w,b)b:=b−αdJ(w,b)dbb := b - \alpha\frac{dJ(w, b)}{db}b:=b−αdbdJ(w,b)
注:其中 α 表示学习速率,即每次更新的 w 的步伐长度。当 w 大于最优解 w′ 时,导数大于 0,那么 w 就会向更小的方向更新。反之当 w 小于最优解 w′ 时,导数小于 0,那么 w 就会向更大的方向更新。迭代直到收敛。
通过平面来理解梯度下降过程:
1.2.3 导数
理解梯度下降的过程之后,我们通过例子来说明梯度下降在计算导数意义或者说这个导数的意义。
1.2.3.1 导数
导数也可以理解成某一点处的斜率。斜率这个词更直观一些。
- 各点处的导数值一样
我们看到这里有一条直线,这条直线的斜率为4。我们来计算一个例子
例:取一点为a=2,那么y的值为8,我们稍微增加a的值为a=2.001,那么y的值为8.004,也就是当a增加了0.001,随后y增加了0.004,即4倍
那么我们的这个斜率可以理解为当一个点偏移一个不可估量的小的值,所增加的为4倍。
可以记做f(a)da\frac{f(a)}{da}daf(a)ddaf(a)\frac{d}{da}f(a)dadf(a)
- 各点的导数值不全一致
例:取一点为a=2,那么y的值为4,我们稍微增加a的值为a=2.001,那么y的值约等于4.004(4.004001),也就是当a增加了0.001,随后y增加了4倍
取一点为a=5,那么y的值为25,我们稍微增加a的值为a=5.001,那么y的值约等于25.01(25.010001),也就是当a增加了0.001,随后y增加了10倍
可以得出该函数的导数2为2a。
- 更多函数的导数结果
函数 | 导数 |
---|---|
f(a)=a2f(a) = a^2f(a)=a2 | 2a2a2a |
f(a)=a3f(a)=a^3f(a)=a3 | 3a23a^23a2 |
f(a)=ln(a)f(a)=ln(a)f(a)=ln(a) | 1a\frac{1}{a}a1 |
f(a)=eaf(a) = e^af(a)=ea | eae^aea |
σ(z)=11+e−z\sigma(z) = \frac{1}{1+e^{-z}}σ(z)=1+e−z1 | σ(z)(1−σ(z))\sigma(z)(1-\sigma(z))σ(z)(1−σ(z)) |
g(z)=tanh(z)=ez−e−zez+e−zg(z) = tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}g(z)=tanh(z)=ez+e−zez−e−z | 1−(tanh(z))2=1−(g(z))21-(tanh(z))^2=1-(g(z))^21−(tanh(z))2=1−(g(z))2 |
1.2.3.2 导数计算图
那么接下来我们来看看含有多个变量的到导数流程图,假设J(a,b,c)=3(a+bc)J(a,b,c) = 3{(a + bc)}J(a,b,c)=3(a+bc)
我们以下面的流程图代替
这样就相当于从左到右计算出结果,然后从后往前计算出导数
- 导数计算
问题:那么现在我们要计算J相对于三个变量a,b,c的导数?
假设b=4,c=2,a=7,u=8,v=15,j=45
- dJdv=3\frac{dJ}{dv}=3dvdJ=3
增加v从15到15.001,那么J≈45.003J\approx45.003 J≈45.003
- dJda=3\frac{dJ}{da}=3dadJ=3
增加a从7到7.001,那么v=≈15.001v=\approx15.001v=≈15.001J≈45.003J\approx45.003 J≈45.003
这里也涉及到链式法则
1.2.3.3 链式法则
- dJda=dJdvdvda=3∗1=3\frac{dJ}{da}=\frac{dJ}{dv}\frac{dv}{da}=3*1=3dadJ=dvdJdadv=3∗1=3
J相对于a增加的量可以理解为J相对于v*v相对于a增加的
接下来计算
-
dJdb=6=dJdududb=3∗2\frac{dJ}{db}=6=\frac{dJ}{du}\frac{du}{db}=3*2dbdJ=6=dudJdbdu=3∗2
-
dJdc=9=dJdududc=3∗3\frac{dJ}{dc}=9=\frac{dJ}{du}\frac{du}{dc}=3*3dcdJ=9=dudJdcdu=3∗3
1.2.3.4 逻辑回归的梯度下降
逻辑回归的梯度下降过程计算图,首先从前往后的计算图得出如下
-
z=wTx+bz = w^Tx + bz=wTx+b
-
y^=a=σ(z
- 点赞
- 收藏
- 关注作者
评论(0)