Bootstrap

#深度学习到卷积

深度学习

机器学习流程

1.数据获取

2.特征工程

3.建立模型

4.评估与应用

深度学习应用

1.无人驾驶汽车

2.人脸识别

3.医学领域(基因组和...)

4.变脸

5.分辨率重构

.

.

.

.

.

计算机视觉

图像分类任务:

像素值越低越暗

300 * 100 * 3:

长:300

宽:100

颜色通道:3

机器学习常规套路

1.收集数据并给定标签

2.训练一个分类器

3.测试,评估

K近邻算法

K=3:看周围最近的3个是什么

看它周围什么多他就是什么

K近邻计算流程

距离的选择

训练数据与测试数据各个像素点相减:

缺点

无法确定主体,如果背景相同就会被分类到一起

神经网络基础

线性函数

有些像素点对于确定猫是促进作用,有些像素点是抑制作用

W:每个像素点的对照程度不一样(权重参数不一样)

X:像素点的值

3072:每个类别对于每个像素点的权重参数

10:十个不同类别(猫 狗 汽车 轮船...)

b: 偏执参数 (微调操作)

10x1:十个不同类别各自进行微调

计算方法

三分类:

像素点:

56,231,24,2

W:

是3x4的矩阵,3代表3分类 4代表4个像素点

正值代表对该分类起促进作用

负值代表对该分类起抑制作用

计算方法:

0.2 x 56 + -0.5 x 0.1 x 24 + 2.0 x 2 + 1.1 = -96.8

-96.8:对应猫的得分

W通过梯度下降算法优化而来(随机出初始化一个3x4矩阵 通过不断优化更新而来)

损失函数

L = 其他类别得分-正确类别得分+1 (越小越好)

+1:

如果得分比较接近 相差小于零 比如猫类别 car得分为3.15 3.15 - 3.2 = -0.05 小于0 会判定为没有损失 +1了就可以判定为有损失了 L小于零就没有损失 实际上损失小 有损失

损失函数:用来衡量当前权重参数做完之后的结果

前向传播(计算出Loss值)整体流程

前向传播就是将数据传递到输出层得到预测结果

激活函数

sigmoid函数

可以将得分转换为一个概率

exp:

exp函数图像

放大差异 让结果看起来更加明显

normalize:

归一化

经过exp之后比上三个数相加得到概率值

L_i:取对数

越接近于1对应的y值越小 ---> 对应损失值的越小

反向传播(更新模型 梯度下降)

反向传播是根据预测结果与真实值之间的差异来调整权重和偏差 提高模型的准确性

前向传播有多个w

每个w侧重关注点不一样

先看w3对f做的贡献(就是求导)

再看w2对后面做多大贡献(求导)

从后往前分步逐层求导

求梯度的方法:链式法则

整体框架

input layer:

x代表输入特征的数量

例如小猫的照片是32 x 32 x 3 的 x就要输入3072个

hidden layer(特征提取):

对原始输入特征做些计算机自己能识别的改变 方便计算机自己识别信息

激活函数对比

sigmoid函数数值较大或者数值较小会出现梯度消失

所以多用Relu函数

数据预处理

X - = np.mean(X, axis = 0):

使数据更靠近原点

normalized:

对数据的各个维度进行放缩和扩充

参数初始化

np.random.randn(D,H):

随机初始化一个D x H的矩阵

0.01:

防止不同的权重参数值浮动太大

DROP OUT(比例)

防止网络模型更复杂

可以使每一次训练的架构变得简单

每一层每一次随机选择固定比例的一部分杀死

先数据预处理 对文本图像其他数据进行处理得到输入层

前向传播通过w1 w2(权重参数矩阵)与隐藏层进行连接 进行特征提取

w1[3,4]左边连3个 右边连4个

每个隐藏层之后要使用relu激活函数

得出loss值之后再反向传播

逐步对w3求导 对w2求导... relu函数也要带进去 分别进行更新

找到什么样的权重参数能够最适合于当前的任务

卷积神经网络(CNN网络)

1.应用领域

1.检测任务

摄像头中进行追踪检测

2.分类和检索

分类:传统的分类就是看他这张图片是什么

检索:检索就是输入一张图像 会返回一些相似的结果图

也是进行特征提取,传统神经网络的权重参数矩阵特别大,卷积神经网络可以解决该问题

3.超分辨率重构

4.医学任务

细胞检测 人体透视图动态图结果分析

OCR字体识别

车牌识别

5.无人驾驶

6.人脸识别

2.卷积网络与传统网络的区别

展现出来的特征是二维的 输入一个图像 传统神经网络会转成二维的: 784(28 x 28 x 1) x 1

卷积神经网络展现的是三维的 输入的一个图像 转成三维的:28 x 28 x1

3.整体架构

输入层:图像数据

卷积层:提取特征

池化层:压缩特征

全连接层:通过一组权重参数 把输入层和隐藏层连接到一起

4.卷积层的作用

将图像进行分割成多个部分 分别进行特征提取

图中蓝色区域就是被分割的小部分

使用权重参数进行获取特征值(与传统神经网络类似)

5 x 5 x 3 :蓝色图中的黑色区域应该是5x5大小的

蓝色的是原始数据被划分成多个区域后的数据C2,每个数字代表像素点的值,右下角是权重参数(W)

黑色的部分是C2又一次被划分成多个区域 计算出每个区域的特征值:

绿色的可以叫做特征图

总结

卷积的作用就是对于不同的区域得到的特征是不一样的 然后选择一种计算的方法 对于每一个小区域计算它应该的特征值是多少

5.卷积特征值的计算方法

图像的颜色通道

常见是RGB 三颜色通道(比如输入数据:32 x 32 x 3 的 3) 就是一张图片分成三个通道

做计算的过程当中 三个通道都单独计算 最后将每个通道卷积的结果加在一起

刚刚的蓝色图就是单个通道 实际上三个通道都要经过相同的计算过程

计算过程

Input Volume(输入层) 第一列:

7 x 7 x 3

7 x 7是图像的h是7 w是7

x 3 是3个颜色通道

Filter W0(卷积核):

要分区域进行特征提取

输入的通道数(就是h x w x c 的c) 要和filter当中的维度(3 x 3 x 3中的第3个3)要必须相等

前两个3 x 3: 在原始数据中,每3 x 3的区域进行区域选择(就是输入层中蓝色的框框) 计算出一个特征值

有3个红色的格子,就是3个颜色的通道

计算方式(内积):

对应位置相乘

相乘完之后的结果相加 要记得加上 b 的值

三个通道都计算完之后的结果加到一起

3就是绿色框框中的第一个数3

可以添加多个Filter 让特征图更加丰富

6.步长与卷积核大小对结果的影响

多次卷积

要在得到的特征图继续做卷积 可以得到更为精确的特征图

堆叠的卷积层

e.g. 6:

用了6个filter 有6个不同的卷积核 得到了6个不同的特征图 得到的深度就是6 (蓝色的h)

5 x 5 x 3(卷积核):

卷积核的第三个值一定和前面输入(h -> 3)相同

卷积层涉及参数

1.滑动窗口步长

步长为1的卷积:

在原有基础上 移动步长为1的单元格

2.卷积核尺寸

选择区域的大小(红色部分)

卷积核尺寸越小 越精细

3.边缘填充

(+pad 1):边缘填充为1

周围灰色区域就是填充的部分

越靠近中间部分的数据在迭代的时候越容易被重复计算

填充可以使边界的数据利用的次数更多 更加公平 更加严谨

弥补边界信息缺失

解决边界梯度特征利用不充分问题

4.卷积核个数

就是最终在算的过程中要得到多少个特征图

7.卷积结果计算公式

例:

如果输入是数据是32x32x3的图像,用10个5x5x3的filter来进行卷积操作,

指定步长为1,边界填充为2,最终输入的规模为?

H = (32 - 5 + 2 x 2)/1 + 1 = 32

W = (32 - 5 + 2 x 2)/1 + 1 = 32

因为有10个fileter,所以最终得到10个特征图

所以c为10

综上:

输出规模为 32 x 32 x 10

(经过卷积操作后也可以保持特征图长度,宽度不变)

8.卷积参数共享

用同样一组卷积核 对于图像当中 每一个区域 进行特征提取 在对每个区域进行特征提取的卷积核的值是不变的

红色的就是卷积核 就是卷积参数共享

9.池化层

得到的特征图太丰富了 特征图上的数据 并不是都是重要的 池化层就可以压缩特征图

不涉及任何的矩阵计算 只是进行压缩

压缩方法
1.MAX POOLING

最大池化:(和卷积一样 选取不同区域筛选出最大的值)

选取最大的原因: 值越大说明这个结果比较重要 权重参数是不会变的 得到权重参数的计算之后 如果值越大 就是整个神经网路认为它是比较重要的

第一次:

选取红色框中最大数值 并添加到被压缩后的特征图中

第二次:

第三次:

.

.

.

.

2.AVER POOLING(很少用)

平均池化:

和最大池化的原理一样 只是压缩方式为 求所选区域内的平均值

###

10.卷积神经网络整体网络构架

一张图片来了之后先进行特征提取 卷积层都和relu函数搭配一起 两次卷积一次池化 执行过两次卷积之后得到一个大的特征图 再进行池化压缩 然后继续重复操作 最后得到的特征图经过全连接层进行分类转换成概率

比如得到的特征图是 32 x 32 x 10的 要想进行分类转换成概率 就需要FC(全连接层) 本图例子中是个五分类

全连接层矩阵大小:[10240,5]

10240:需要将传入的特征图 拉成一个特征向量 32 x 32 x 10 = 10240

5:5分类

相当于将10240个特征转换成5个预测的概率值

层数:

带参数进行计算的叫做一层

CONV(卷积层) 带参数计算

RELU(激活层) 不带参数计算

POOL(池化层) 不带参数计算

FC(全连接层) 带参数计算

所以为7层

特征图的变化:

11.VGG网络架构

所有的卷积大小都是3 x 3的,都是细精度进行特征提取

有16层或者19层

红色部分:

64:得到64个特征图

经过pooling之后会损失一些特征信息 体积会变为原来的四分之一

vgg网络在每一次经过pooling之后 在下一次卷积中 使得特征图翻倍 来弥补损失

用特征图的个数弥补长宽的损失

VGG可以通过重复使用简单的基础块来构建深度模型

;