第三周上课内容总结[神经网络与深度学习]

一、图像滤波与卷积 

1.什么是卷积?

丢两个骰子,每一个骰子的点数平均分布,显然有:

P(x=i)=\frac{1}{6},i=1,...6

求:把两个骰子都抛出去,求点数加起来为t的概率是多少? 如 t=4,设 𝑓(𝑖)表示第一个骰子投出i 的概率,𝑔(𝑖)表示第二个骰子投出i的概率。

则两个骰子加起来为4的概率: f(1)g(3)+f(2)g(2)+f(3)g(1),

写成卷积标准形式为:

(f*g)(4)=\sum_{i=1}^{3}f(i)g(4-i)

进一步,两个骰子加起来为t的概率, 就是二个骰子的概率密度函数卷积:

 (f*g)(t)=\sum_{i=1}^{6}f(i)g(t-i)

 2.图像(二维)卷积定义:

(f*g)(x,y)=\frac{1}{NM}\sum_{i=0}^{N-1}\sum_{j=0}^{M-1}f(i,j)g(x-i,y-j)

        其中g称为滤波器。

 3.图像滤波的计算图示:

 4.图像滤波的计算过程: 

(1)滤波器𝑓(𝑥, 𝑦)左右、上下反转:得到𝑓(−𝑥, −𝑦);

(2)按照前述公式计算卷积(先乘后累加)

5.图像去噪:

 6.图像卷积演示:Image Kernels explained visually

二、深度学习平台介绍

1.深度学习的相关方向

 2.深度学习库简介

3.深度学习库的比较 

4.PyTorch简介 

        PyTorch是一个Python的深度学习库。它最初由Facebook人工智能研究小组开发,而优步的Pyro软件则用于概率编程。

        最初,PyTorch由Hugh Perkins开发,作为基于Torch框架的LusJIT的 Python包装器。PyTorch在Python中重新设计和实现Torch,同时为后端代码共享相同的核心C库。

        除了Facebook之外,Twitter、GMU和Salesforce等机构都采用了 PyTorch。到目前,据统计已有80%的研究采用PyTorch,包括Google。

        下面的表格是对两个深度学习库PyTorch和TensorFlow2的对比:

 PyTorch的基本概念

(1)张量(Tensor)

        是一个物理量,对高维 (维数 ≥ 2) 的物理量进行 “量纲分析” 的一种工具。简单的可以理解为:一 维数组称为矢量,二维数组为二阶张量,三维数组 为三阶张量 …

(2)计算图

        用“结点”(nodes)和“线”(edges)的有向图来 描述数学计算的图像。“节点” 一般用来表示施加 的数学操作,但也可以表示数据输入的起点 /输出的 终点,或者是读取 /写入持久变量的终点。“线”表 示“节点”之间的输入 /输出关系。这些数据“线” 可以输运“size可动态调整”的多维数据数组,即 “张量”(tensor)。

表示方法

--使用 tensor 表示数据 

--使用 Dataset、DataLoader 读取样本数据和标签 

--使用变量 (Variable) 存储神经网络权值等参数 

--使用计算图 (computational graph) 来表示计算任务 

--在代码运行过程中同时执行计算图

三、卷积神经网络基础

1.卷积神经网络进化史

2.基本概念 

全连接网络:链接权过多,难算难收敛,同时可 能进入局部极小值,也容易产生过拟合问题。

例如:输入为96x96图像,要学习100个特征。

局部连接网络:顾名思义,只有一部分权值连接。 部分输入和权值卷积。

特征提取:

填充(Padding):就是在矩阵的边界上填充一些值,以增加矩阵的大小,通常用0或者复制边界像素来进行填充。

步长 (Stride):顾名思义,就是说过滤器一次移动多少格子。如图步长为2。

 多通道卷积:如RGB。

 池化(Pooling):使用局部统计特征,如均值或最大值。解决特征过多问题。

卷积神经网络结构: 

构成:由多个卷积层和下采样层构成,后面可连接全连接网络

卷积层:k个滤波器

下采样层:采用min或max

后面:连着全连接网络

 3.学习算法

 四、LeNet-5网络

1.问题提出:

2.网络结构: 

3.结构详解: 

(1)C1层:

        6个Feature map构成;

        每个神经元对输入进行5*5卷积;

        每个神经元对应5*5+1个参数,共6个feature map, 28*28个神经元,因此共有 (5*5+1)*6*(28*28)=122,304连接;

(2)C2层(Pooling层):

(3)C3层(卷积层): 

 (4)S4层: 与S2层工作相同

 (5)C5层:

        120个神经元;

        每个神经元同样对输入进行5*5卷积,与S4全连接;

        总连接数(5*5*16+1)*120=48120;

 (6)F6层:

        84个神经元;

        与C5全连接;

        总连接数(120+1)*84=10164;

 (7)输出层:

         由欧式径向基函数单元构成;

         每类一个单元;

         输出RBF单元计算输入向量和参数向量之间的欧式距离;

4.网络说明: 

与现在网络的区别:

        -卷积时不进行填充(padding)

        -池化层选用平均池化而非最大池化

        -选用Sigmoid或tanh而非ReLU作为非线性环节激活函数

        -层数较浅,参数数量小(约为6万)

5.误差反向传播:  

经典BP算法

卷积NN的BP算法:下采样层 

     如果当前是卷积层,下一层为下采样层,误差如何从下采样层回传 假设为2*2核平均池化。

              

局部误差从卷积层传到下采样层

 

 6.网络结构可视化: 3D Visualization of a Convolutional Neural Network

 7.LeNet5代码实现:

import torch
from torch import nn
from d2l import torch as d2l

class Reshape(torch.nn.Module):
    def forward(self, x):
        return x.view(-1, 1, 28, 28)
net = torch.nn.Sequential(
    Reshape(),
    nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(),
    nn.AvgPool2d(kernel_size=2, stride=2),
    nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(),
    nn.AvgPool2d(kernel_size=2, stride=2),
    nn.Flatten(),
    nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(),
    nn.Linear(120, 84), nn.Sigmoid(),
    nn.Linear(84, 10))

相关说明: 

(1)nn. Sequential()  :该函数可以将不同的模块组合成一个新的模块,将各模块按顺序输入即可

(2)nn.AvgPool2d(kernel_size, stride)MaxPool2d :平均池化或最大池化层,输入参数分别为池化窗口大 小和步长。二参数同时可以为整数,否则为元组。类似的还有平均池化                         nn.AvgPool2d(kernel_size, stride)

(3)nn. Sigmoid() :该函数为上一层的输出添加sigmoid激活函数。类似的还有nn.ReLU(),nn.Tanh()

(4)nn. Conv2d(in_channels,out_channels,kernel_size) :卷积层,其三个参数按顺序代表输入通道数、输出通道数、卷积核大小 若卷积核形状为正方形,则卷积核大小可以为int ,否则,卷积核大小必须为元组(tuple) 如:nn.Conv2d(1, 6, (5, 4))即代表卷积核大小为5×4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值