神经网络与深度学习 笔记(三)基本的CNN与常用数据集

一、基本卷积神经网络

1.Alexnet

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

2.VGG-16

VGG16(Visual Geometry Group 16)是由牛津大学视觉几何组(Visual Geometry Group)开发的深度卷积神经网络架构之一,用于图像分类和识别任务。VGG16由16个卷积层和3个全连接层组成,因此得名。

结构

在这里插入图片描述

说明

  • 改进
    • 更深的网络结构: VGG16比AlexNet更深,通过堆叠更多的卷积层和池化层,可以更好地学习图像的特征。网络规模进一步增大,参数数量约为1.38亿。
    • 小卷积核的使用: VGG16采用了连续的3x3卷积核,相比于AlexNet的11x11和5x5卷积核,这样的设计使得网络对特征的挖掘能力更加深入。
    • 减少全连接层的使用: VGG16相比于AlexNet减少了全连接层的数量,从而降低了过拟合的风险,提高了模型的泛化能力。
    • 由于各卷积层、池化层的超参数基本相同,整体结构呈现出规整的特点。
  • 普遍规律
    随着网络深入,高和宽衰减,通道数增多

优缺点

  • 优点:
    • 表征能力强: VGG16通过堆叠多个卷积层和池化层,能够学习到更加复杂和抽象的图像特征,从而提高了网络的表征能力。
    • 易于理解和实现: VGG16的结构相对简单,只有基本的卷积和池化层,因此易于理解和实现。
    • 通用性强: VGG16在各种图像分类任务中表现良好,具有较好的通用性。
  • 缺点:
    • 参数量大: VGG16拥有大量的参数,这导致了网络模型的尺寸较大,不利于在资源有限的情况下部署和训练。
    • 计算量大: 由于网络深度较大,VGG16的计算量较大,训练和推断时间较长,不太适用于实时性要求高的应用场景。
    • 容易过拟合: VGG16相对于AlexNet减少了全连接层,但仍然有较多参数,容易在训练过程中出现过拟合的问题,特别是在数据集较小的情况下。

示例

示例代码搭建的网络结构为为vgg-11,在jupyter notebbok中运行

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

def vgg_block(num_convs, in_channels, out_channels):
    layers = []
    for _ in range(num_convs):
        layers.append(nn.Conv2d(in_channels, out_channels,
                                kernel_size=3, padding=1))
        layers.append(nn.ReLU())
        in_channels = out_channels
    layers.append(nn.MaxPool2d(kernel_size=2,stride=2))
    return nn.Sequential(*layers)

conv_arch = ((1, 64), (1, 128), (2, 256), (2, 512), (2, 512))
def vgg(conv_arch):
    conv_blks = []
    in_channels = 1
    # 卷积层部分
    for (num_convs, out_channels) in conv_arch:
        conv_blks.append(vgg_block(num_convs, in_channels, out_channels))
        in_channels = out_channels

    return nn.Sequential(
        *conv_blks, nn.Flatten(),
        # 全连接层部分
        nn.Linear(out_channels * 7 * 7, 4096), nn.ReLU(), nn.Dropout(0.5),
        nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(0.5),
        nn.Linear(4096, 10))

net = vgg(conv_arch) 
X = torch.randn(size=(1, 1, 224, 224))
for blk in net:
    X = blk(X)
    print(blk.__class__.__name__,'output shape:\t',X.shape)

ratio = 4
small_conv_arch = [(pair[0], pair[1] // ratio) for pair in conv_arch]
net = vgg(small_conv_arch)
lr, num_epochs, batch_size = 0.05, 10, 128
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)
d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())
  • 运行结果
    在这里插入图片描述

2.残差网络

残差网络(Residual Network,简称ResNet)是一种由微软亚洲研究院提出的深度神经网络架构,旨在解决深度神经网络训练过程中的梯度消失和网络退化问题。ResNet通过引入残差连接(residual connections)来允许网络学习残差,从而更有效地训练深度网络。
Deep residual learning for image recognition
在这里插入图片描述

梯度消失问题

非残差网络的缺陷:理想情况下,随着网络的加深,训练后的性能会递增,然而实际上,层数过多后网络的性能反而开始下降。引起这种现象的主要原因是梯度消失。
在这里插入图片描述
梯度消失问题通常出现在深度网络中,特别是在使用一些特定的激活函数(比如 Sigmoid 和 Tanh)时更加明显,因为这些激活函数的导数在输入值很大或很小的时候会趋近于零(下图为sigmoid函数及其导数),从而使得反向传播时梯度减小。当梯度逐层递减时,越靠近输入端的层的权重更新越缓慢,因此这些层可能无法有效地学习到有用的特征。
在这里插入图片描述

基本原理

为了解决梯度消失问题和由此引发的网络退化问题,ResNet引入了残差连接。在传统的神经网络中,假设某一层的输入为x,输出为H(x),则网络学习的目标是学习从输入x到输出H(x)的映射。如果我们认为H(x)的表达能力不够,即网络无法完全学习到期望的映射,我们可以考虑引入一个残差F(x),使得H(x)= F(x)+x。这样,网络的学习目标就转变为学习残差F(x)而非完整的映射H(x)。

  • 残差块(Residual Block)
    ResNet中的基本组件是残差块。一个残差块由两个连续的卷积层组成,中间通过恒等映射(identity mapping)连接。设输入为x,第一个卷积层的输出为F(x),第二个卷积层的输出为H(x)=F(x)+x,结构如下:

在这里插入图片描述

优势

  • 梯度传播: 残差块允许梯度沿着残差连接直接传播到前面的层,从而避免了梯度在传播过程中逐层递减的问题。在传统的深度神经网络中,梯度逐层递减可能导致梯度消失,使得较浅层的参数无法得到有效的更新。而残差块的引入使得梯度能够更好地传播,从而提高了网络的训练效果。
  • 学习残差: 残差块的设计思想是让网络学习残差而非完整的映射。通过引入残差连接,网络只需要学习到输入和输出之间的差异,即残差,而不需要学习完整的映射。这使得网络更容易优化,加快了训练速度,并且有助于提高网络的泛化能力。
  • 解决网络退化问题: 深度神经网络的一个常见问题是网络退化(network degradation),即随着网络深度的增加,网络性能开始下降。残差块通过引入残差连接,即使网络变得非常深,也不会出现性能下降的情况,从而缓解了网络退化问题。
  • 增加网络深度: 由于残差块解决了梯度消失问题,因此可以构建更深的网络结构。更深的网络通常具有更强的表达能力,可以学习到更复杂的特征,因此残差块的引入使得网络能够更好地适应复杂的任务。

残差网络

  • 普通网络的基准模型受VGG网络的启发
  • 卷积层主要有3×3的过滤器,并遵循两个简单的设计规则:
    1. 对输出特征图的尺寸相同的各层,都有相同数量的过滤器;
    2. 如果特征图的大小减半,那么过滤器的数量就增加倍,以保证每一层的时间复杂度相同。
  • ResNet模型比VGG网络更少的过滤器和更低的复杂性。ResNet具有34层的权重层,有36亿FLOPs,只有VGG-19 ( 19.6亿FLOPs)的18%。

网络结构
在这里插入图片描述
性能
在这里插入图片描述

示例

在这里插入代码片
  • 运行结果

二、常用数据集

1. MNIST

MNIST 数据集是一个常用的手写数字识别数据集,由 Yann LeCun 等人收集并发布。它包含了 60000 个训练样本和 10000 个测试样本,每个样本都是一个 28x28 像素的灰度图像,表示了一个手写的单个数字(0 到 9)。MNIST 数据集的特点包括:

  • 简单易用: MNIST 数据集是深度学习领域最常用的数据集之一,因为它简单易用,可以用于快速测试和验证模型的性能。
  • 标签清晰: 每个样本都有一个对应的标签,表示图像中手写数字的真实值,使得该数据集适用于监督学习任务。
  • 标准化: MNIST 数据集已经被标准化处理过,图像中的数字位于中心位置,且大小一致,这样有助于模型对图像进行统一处理。
  • 小规模: MNIST 数据集相对较小,训练和测试速度比较快,因此适合用于教学、演示以及快速原型设计。

MNIST 数据集通常被用来作为深度学习模型的基准测试,许多学术研究和算法验证都会使用这个数据集。同时,由于 MNIST 数据集相对简单,一些基础的模型如多层感知机(MLP)、卷积神经网络(CNN)等也可以在这个数据集上获得不错的性能。

  • MINST数据集加载
def load_data_fashion_mnist(batch_size, resize=None): #@save
	"""下载Fashion-MNIST数据集,然后将其加载到内存中。"""
	trans = [transforms.ToTensor()]
	if resize:
		trans.insert(0, transforms.Resize(resize))
	trans = transforms.Compose(trans)
	mnist_train = torchvision.datasets.FashionMNIST(
		root="../data", train=True, transform=trans, download=True)
	mnist_test = torchvision.datasets.FashionMNIST(
		root="../data", train=False, transform=trans, download=True)
	return (data.DataLoader(mnist_train, batch_size, shuffle=True,
							num_workers=get_dataloader_workers()),
			data.DataLoader(mnist_test, batch_size, shuffle=False,
							num_workers=get_dataloader_workers()))

2. Fashion-MNIST数据集

  • FashionMNIST 是一个替代 MNIST 手写数字集 的图像数据集。它是由Zalando旗下的研究部门提供,涵盖了来自 10 种类别的共 7 万个不同商品的正面图片。
  • FashionMNIST 的大小、格式和训练集/测试集划分与原始的MNIST 完全一致。60000/10000 的训练测试数据划分,28x28的灰度图片。你可以直接用它来测试你的机器学习和深度学习算法性能,且不需要改动任何的代码。

以下是数据集中的类,以及来自每个类的10个随机图像:
在这里插入图片描述

3. CIFAR-10数据集

CIFAR-10数据集由10个类的60000个32x32彩色图像组成,每个类有6000个图像。有50000个训练图像和10000个测试图像数据集。分为五个训练批次和一个测试批次,每个批次有10000个图像。测试批次包含来自每个类别的恰好1000个随机选择的图像。

  • 以下是数据集中的类,以及来自每个类的10个随机图像:

在这里插入图片描述

4. PASCAL VOC数据集

  • PASCAL的全称是Pattern Analysis, Statistical Modelling and Computational Learning
  • VOC的全称是Visual Object Classes
  • 目标分类(识别)、检测、分割最常用的数据集之一
  • 第一届PASCAL VOC举办于2005年,2012年终止。常用的是PASCAL 2012
  • 一共分成20类:
    • person
    • bird, cat, cow, dog, horse, sheep
    • aeroplane, bicycle, boat, bus, car, motorbike, train
    • bottle, chair, dining table, potted plant, sofa, tv/monitor

文件格式:

在这里插入图片描述

标注格式:

里面是图像对应的XML标注信息描述,每张图像有一个与之对应同名的描述XML文件,XML前面部分声明图像数据来源,大小等元信息,举例如下
在这里插入图片描述
Pascal VOC2012 Main中统计的训练、验证、验证与训练、测试图像:
在这里插入图片描述
20类图像实例:
在这里插入图片描述

5. MS COCO数据集

  • MS COCO的全称是Microsoft Common Objects in Context,起源于微软于2014年出资标注的Microsoft COCO数据集
  • 数据集以scene understanding为目标,主要从复杂的日常场景中截取
  • 包含目标分类(识别)、检测、分割、语义标注等数据集
  • ImageNet竞赛停办后,COCO竞赛就成为是当前目标识别、检测等领域的一个最权威、最重要的标杆
  • 官网:http://cocodataset.org
  • 提供的标注类别有80 类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万个。
    • 人:1类
    • 交通工具:8类,自行车,汽车等
    • 公路常见:5类,信号灯,停车标志等
    • 动物:10类,猫狗等
    • 携带物品:5类,背包,雨伞等
    • 运动器材:10类,飞盘,滑雪板,网球拍等。
    • 厨房餐具:7类,瓶子,勺子等
    • 水果及食品:10类
    • 家庭用品:7类,椅子、床,电视等
    • 家庭常见物品:17类,笔记本,鼠标,遥控器等

MS COCO数据集示例:
在这里插入图片描述

6. ImageNet数据集

  • 始于2009年,李飞飞与Google的合作:“ImageNet: A Large-Scale Hierarchical Image Database”
  • 总图像数据:14,197,122
  • 总类别数:21841
  • 带有标记框的图像数:1,034,908

在这里插入图片描述

7. ISLVRC 2012子数据集

  • 训练集:1,281,167张图片+标签
  • 类别数:1,000
  • 验证集:50,000张图片+标签
  • 测试集:100,000张图片
  • 24
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值