神经网络与深度学习笔记(二)

本文探讨了深度学习中的全连接网络问题,如计算效率低、收敛困难和过拟合,提出局部连接网络作为解决方案。同时,文章比较了TensorFlow和PyTorch两种深度学习平台,并介绍了卷积神经网络的基础概念、LeNet-5和AlexNet网络结构的演变,以及优化策略如ReLU激活函数和Dropout的运用。
摘要由CSDN通过智能技术生成

前言

为什么要“深度学习”?

全连接网络问题:链接权过多,算的慢,难收敛,同时可能进入局部极小值,也容易产生过拟合问题。比如说输入1000×1000的图像,隐含层有1M个节点,则输入到隐含层之间有1M×1M数量级参数。

解决算的慢问题:减少权值连接,每一个节点只连到上一层的少数神经元,即局部连接网络。

解决难收敛、算的慢问题:权值过多极易产生过拟合。为了消除这个问题,我们回想人类的解决思路,即信息分层处理,每一层在上层提取特征的基础上获取进行再处理,得到更高级别的特征。

深度学习平台有很多,比如说TensorFlow,PyTorch等,二者对比如下:

PyTorch基本使用

张量(Tensor):一个物理量,对高维(维数不小于2)的物理量进行“量纲分析”的一种工具。例如:一维数组称为矢量,二维数组称为二阶张量,三维数组称为三阶张量等。

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

  • 使用tensor表示数据
  • 使用Dataset、DataLoader读取样本数据和标签
  • 使用变量(Variable)存储神经网络权值等参数
  • 使用计算图(conputational graph)来表示计算任务
  • 在代码运行过程中同时执行计算图

卷积神经网络基础

进化史

基本概念

特征提取

图像卷积时,首先把卷积核(黄色)上下转置,此处是对称的,所以忽视。

填充(Padding)和步长(Stride)

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

步长(Stride),如图步长为2

多通道卷积:如RGB

池化(Polling)

思想:使用局部统计特征,如均值或最大值,解决特征过多问题。

卷积神经网络结构

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

卷积层:k个滤波器

下采样层:采用mean或max

后面:连着全连接网络

经典BP算法

LeNet-5网络

网络结构

C1层

  • 6个Feature map构成
  • 每个神经元对输入进行5×5卷积
  • 每个神经元对应5×5+1个参数,共6个Feature map,28×28个神经元,因此共有(5×5+1)×6×(28×28)=122304连接

S2层

池化层

C3层

卷积层

S4层

与S2工作相同

C5层

  • 120个神经元
  • 每个神经元同样对输入进行5×5卷积,与S4全连接
  • 总连接数(5×5×16+1)×120=48120

F6层

  • 84个神经元
  • 与C5全连接
  • 总连接数(120+1)×84=10164

输出层

  • 由欧式径向基函数单元构成
  • 每类一个单元
  • 输出RBF单元计算输入向量和参数向量之间的欧氏距离

网络说明

与现在网络区别

  • 卷积时不进行填充
  • 池化层选用平均池化而非最大池化
  • 选用Sigmod或tanh而非ReLU作为费现象环节激活函数
  • 层数较浅,参数数量小(约为6万)

普遍规律

  • 随网络深入,宽、高衰减,通道数增加
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 = 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))

基本卷积神经网络

AlexNet

网络说明

网络一共有8层可学习层——5层卷积层和3层全连接层

改进:

  • 池化层均采用最大池化
  • 选用ReLU作为非线性环节激活函数
  • 网络规模扩大,参数数量接近6000万
  • 出现“多个卷积层+一个池化层”的结构

普遍规律:随网络深入,宽、高衰减,通道数增加

改进:输入样本

  • 从原始图像(256,256)中,随机的crop出一些图像(224,224)【平移变换,crop】
  • 水平翻转图像【反射变换】
  • 给图像增加一些随机的光照【光照、彩色变换,color jittering】

改进:激活函数

  • 采用ReLU替代Tan Sigmoid
  • 用于卷积层与全连接层之后

改进:Dropout

在每个全连接层后面使用一个Dropout层,以概率p随机关闭激活函数

改进:双GPU策略

第一层卷积核可视化

训练AlexNet网络

lr, num_epochs = 0.01, 10
d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值