卷积神经网络基础
只要有包含有卷积层的网络都可以理解为卷积神经网络
GPU矩阵运算快,CPU加法运算快
全连接层
全连接层就是由许许多多的神经元共同连接得来的
将这几个激励×权重进行求和,再加上他的一个偏置(-1),再通过我们这样的一个激励函数f(x),就得到了我们这样一个最终的输出y(神经元)。
比如上面这幅图,从左到右正向传播过程中得到最右边的输出值
将输出值,和所期望的值进行对比,可以得到误差值
然后我们计算每一个节点的偏导数就能计算得到每个节点的误差梯度
这样我们将我们得到的损失值反向应用到我们的损失梯度上,就达到了误差的反向传播过程
彩色RCG→灰度化→二值化
计算白色在所在区域的占比
矩阵变为行向量(输入神经网络输入层)
最右边一列是期望的输出 左边就是我们的编码的方式 就不会重复了
one-hot是对一些数字进行编码的一种方式
比如一行10个位置,分别代表0-9,如果推测目标是8
那么就在第九个空位写1,其余九个空位全部写0
实际训练过程中将输入层节点数设为25个节点
输出节点数设为10个节点
中间的隐层按情况进行设置
卷积层
卷积——滑动窗口在我们的特征图上进行滑动并计算
将卷积核上的元素值与特征层上的元素值对应相乘再相加
我们是以滑动窗口的形式在上面计算——局部感知
滑动过程中他的值不会发生变化——权值共享
经过卷积核的运算我们的体量会大大缩小
进一步解释我们的卷积
同核特征图相加,不同核特征图拼接
卷积核是刚开始随机生成的,后面不断迭代训练 会得到一个最优的卷积核
1.比如输入特征矩阵是rgb是三维的,那我们的卷积核也是三维的
2.就是我们这里有两个卷积核,那么我们输出的特征矩阵维度也是两个
思考:1、比如偏移量为-1,那我们就在输出特征矩阵上的各个元素都减1就可以,偏移量为1则相加
2、
sigmoid函数越来越大的时候导数就趋近于0了
Relu激活函数 小于0的时候导数就是0 大于0的时候导数就是1
往往在训练过程当中,建议一开始不要用特别大的学习率进行学习,这样会导致很多神经元失活
*这里梯度要是不清楚的话可以自己去看一下视频
WXW:这里就是4×4的大小
FXF:这里就是滤波器(卷积核)的大小,就是3X3
步长:就是每一次移动了多少,这里就是2
P:一般都是加2P,但是这里下面我们就在右边一列跟下面一行加了P所以只要加1个P就可以了
所以这里的N就是等于(4-3+1)/2+1=2
所以得到特征矩阵大小就是2×2
步长如果是2的话,就会出现一个越界行为,所以我们这里可以用padding进行一个补零,就可以正常进行卷积,也不会出现越界的一个情况了
池化层
左边的实例就是,2×2的池化核,寻找最大值
平均值池化层
没有训练参数
对比之前的卷积层我们可以看到这里的卷积核是有各种参数的
但在池化过程中是没有参数的
只改变特征矩阵的w和h,不改变深度
假设我们有一个4×4×3的矩阵的话
池化核为2×2的话,步距也是2的话,结果就是2×2×3
池化核大小和步距所相同
设置池化核核步距都设置为2,这样直接就可以将原来的大小直接缩减为一半,计算也非常方便