深度学习

  1. 计算机视觉
    (1)应用领域:图片猫🐱识别,目标检测(无人驾驶),图像风格转换(比如转成素描)等等。
    (2)面临的挑战:
    数据的输入量可能会非常大,例如一张1000×1000的图片,特征向量的维度达到了1000×1000×3(RGB,3通道) = 300万
    神经网路中涉及的参数比较多,例如在神经网络中,你也许会有1000个隐藏单元,使用标准的全连接网络,这个矩阵将会含有1000×300万,即30亿个参数。
    ① 如此大量的参数情况下,难以获得足够的数据来防止神经网络发生过拟合
    ② 处理30亿参数的神经网络所需的巨大内存难以应对
  2. 边缘检测示例
    在这里插入图片描述
import numpy as np
image = np.array([[3,0,1,2,7,4],[1,5,8,9,3,1],[2,7,2,5,1,3],[0,1,3,1,7,8],[4,2,1,6,2,8],[2,4,5,2,3,9]])
print(image)
print('-------')
filter_ = np.array([[1,0,-1],[1,0,-1],[1,0,-1]])
print(filter_)
print('-------')
from scipy import signal
convolution = -signal.convolve2d(image,filter_,boundary='fill',mode='valid')
print(convolution)

在这里插入图片描述
检测边缘实例:
在这里插入图片描述

image = np.array([[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0],[10,10,10,0,0,0]])
filter_ = np.array([[1,0,-1],[1,0,-1],[1,0,-1]])
print(-signal.convolve2d(image,filter_,boundary='fill',mode='valid'))

[[ 0 30 30  0]
 [ 0 30 30  0]
 [ 0 30 30  0]
 [ 0 30 30  0]]

  1. 更多边缘检测
    可以检测明暗变化方向
    在这里插入图片描述
    竖直,水平的过滤器
    在这里插入图片描述
    把这9个数字当成参数,通过反向传播学习,边缘捕捉能力会大大增强(可以检查任意角度)
  2. Padding
    假设原始图片是 n × n ,过滤器是 f × f ,那么输出大小是 ( n − f + 1 ) × ( n − f + 1 ) 。
    缺点1,图像每做一次卷积,缩小一点,最后变得很小
    缺点2,在角落或边缘区域的像素点在输出中采用较少,丢失了图像边缘位置的许多信息
    解决上面的问题:
    进行卷积操作前,沿图像边缘填充 p 层像素,令 ( n + 2 ∗ p ) − f + 1 = n ⇒ p = f − 1 /2,这样可以保持图像大小不变,同时也使得边缘信息发挥作用较小的缺点被削弱
    填充多少层,怎么选?
    对于Valid 卷积:p = 0不需,要填充
    对于Same 卷积: p = f − 1 /2 ,f 通常是奇数(对称填充,有中心点)
  3. 卷积步长
    每次过滤器在图片中移动的步长为s(stride)
    输出尺寸为 在这里插入图片描述
  4. 三维卷积
    在这里插入图片描述
    输出是一个二维的,每个格子里是对应着 27个元素求和
    如果希望对不同的通道进行检测边缘,对 filter 的相应层设置不同的参数就可以了
    想要多个过滤器怎么办?(竖直的、水平的,各种角度的)
    在这里插入图片描述
  5. 单层卷积网络
    参数的个数跟图片大小无关,跟过滤器相关,假如有10个过滤器,上面每个过滤器有 27 个参数,加上偏置 b,28个再乘以10,共计280个参数。
    即使图片很大,参数却很少,这也是卷积神经网络的一个特征,叫作避免过拟合。
    在这里插入图片描述
  6. 简单卷积网络示例
    在这里插入图片描述
  7. 池化层
    除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性
    Max 运算的实际作用:
    如果在过滤器中提取到某个特征,那么保留其最大值
    如果没有提取到这个特征,例如在右上象限中这个特征就不明显,其最大值也还是很小
    池化,它有一组超参数 f , s f,sf,s,但没有参数需要学习,不需要梯度下降更新
    池化层特征
    (1)最大池化比平均池化更常用
    (2)常用的参数值为f = 2 or 3 ,s=2
    (3)最大池化时,很少用到 padding(即 p = 0 p=0p=0)
    (4)池化层前后的输入输出通道数一样
    (5)最大池化只是计算神经网络某一层的静态属性,没有需要学习的参数
  8. 卷积神经网络示例
    在这里插入图片描述
    尽量不要自己设置超参数,而是查看文献中别人采用了哪些超参数,选一个在别人任务中效果很好的架构,它也有可能适用于应用程序。
  9. 为什么使用卷积?
    和只用全连接层相比,卷积层 的两个主要优势在于参数共享和稀疏连接,全连接层的参数巨大,卷积层需要的参数较少。
    原因:
    参数共享,特征检测如果适用于图片的某个区域,那么它也可能适用于图片的其他区域
    使用稀疏连接,一个输出仅依赖少部分的输入
    神经网络可以通过这两种机制减少参数,以便我们用更小的训练集来训练它,从而预防过度拟合。
  10. 为什么要进行实例探究
    学习前辈们组建网络的方法,借鉴过来解决自己的问题。
    经典的网络模型:
    LeNet-5
    AlexNet
    VGG
    ResNet
    Inception
  11. 经典网络
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  12. 残差网络 ResNets
    非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题
    在这里插入图片描述
    中间的激活能够到达网络的更深层
    这种方式确实有助于解决梯度消失和梯度爆炸问题,让我们在训练更深网络的同时,又能保证良好的性能
    ResNet 在训练深度网络方面非常有效
  13. 残差网络为什么有用
    残差网络起作用的主要原因:
    残差块学习恒等函数非常容易,能确定网络性能不会受到影响,很多时候甚至可以提高效率,或者说至少不会降低网络的效率.
  14. 网络中的网络 以及 1×1 卷积
    在这里插入图片描述
    可以通过池化层来压缩输入的高度和宽度,但是池化层不改变通道数
    1×1卷积层 给神经网络添加了一个非线性函数,从而减少或保持输入层中的通道数量不变,也可以增加通道数量
  15. 谷歌 Inception 网络简介
    构建卷积层时,你要决定过滤器的大小究竟是1×1,3×3 还是 5×5,要不要添加池化层。
    而 Inception网络 的作用就是代替你来决定,虽然网络架构变得更加复杂,但网络表现却非常好
    基本思想是:
    Inception 网络不需要人为决定使用哪个过滤器或者是否需要池化,而是由网络自行确定这些参数,你可以给网络添加这些参数的所有可能值,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些过滤器组合
    通过使用1×1卷积来构建瓶颈层,从而大大降低计算成本。
    在这里插入图片描述
    18.使用开源的实现方案
    事实证明很多神经网络复杂细致,因而难以复制,因为一些参数调整的细节问题,例如学习率衰减等等,会影响性能
    选择一个喜欢的神经网络框架
    接着寻找一个开源实现,从GitHub下载下来,以此基础开始构建
    这样做的优点在于,这些网络通常都需要很长的时间来训练,而或许有人已经使用多个GPU,通过庞大的数据集预先训练了这些网络,你就可以使用这些网络进行迁移学习
  16. 数据增强 Data augmentation
    数据扩充是经常使用的一种技巧来提高计算机视觉系统的表现
    垂直镜像对称(常用)
    随机裁剪(常用)
    旋转,剪切(局部扭曲)(不常用)
    色彩转换(给RGB通道按分布加上失真值),使得算法对照片的颜色更改更具鲁棒性
    常用的实现数据扩充的方法:
    使用一个线程或者是多线程,用来加载数据,实现变形失真
    然后传给其他的线程或者其他进程,来训练,可以并行实现
    数据扩充过程中也有一些超参数,比如,颜色变化,随机裁剪参数。
    另外,可以使用别人的开源实现,了解他们如何实现数据扩充。也可以自己去调整这些参数
Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐