OUC23暑期培训——深度学习基础【第三周】

目录

第一部分 论文阅读与视频学习

1.1 ResNet​编辑

1.2 ResNeXt

第二部分 代码作业

第三部分 思考题


第一部分 论文阅读与视频学习

1.1 ResNet

  Deep Residual Learning for Image Recognition是一篇2015年由微软研究院的何凯明等人发表的论文,提出了一种用于图像识别的深度残差学习框架。该框架的主要思想是让网络层学习输入和输出之间的残差,而不是直接学习原始映射。这样可以避免网络深度增加时出现的退化问题,即网络的训练误差和测试误差随着层数的增加而上升。作者通过引入快捷连接(shortcut connection)来实现残差学习,即在网络中添加跨越一层或多层的直接连接,将输入和输出进行逐元素相加。这种方式不增加额外的参数和计算复杂度,也便于使用标准的优化方法进行端到端的训练。作者在ImageNet和CIFAR-10等数据集上进行了实验,证明了残差网络可以有效地训练超过100层甚至1000层的深度网络,并且随着网络深度的增加,可以获得更高的准确率。该论文在2016年获得了CVPR最佳论文奖,并且在ILSVRC和COCO等图像识别和检测比赛中取得了优异的成绩。

1.2 ResNeXt

  Aggregated Residual Transformations for Deep Neural Networks是一篇由微软研究院的谢思杰等人发表在2017年CVPR上的论文,提出了一种简单而高效的深度神经网络架构,称为ResNeXt。该架构的主要特点是将残差网络和Inception模块的思想结合起来,使用分组卷积和相同拓扑的多分支结构来增强网络的表达能力和泛化能力。作者引入了一个新的维度,叫做基数(cardinality),来表示每个模块中转换的数量,发现基数对于网络性能的影响比深度和宽度更大。作者在ImageNet和COCO等数据集上进行了实验,证明了ResNeXt可以有效地训练超过1000层的深度网络,并且在图像分类和目标检测等任务上取得了优异的结果。

第二部分 代码作业

AI研习社 “猫狗大战” 比赛(AI研习社 - 研习AI产学研新知,助力AI学术开发者成长。

导入数据

# 用wget命令从指定的网址下载文件
!wget -nc https://static.leiphone.com/cat_dog.rar
# 用pip命令安装pyunpack模块,这是一个可以解压缩各种格式文件的Python模块
!pip install pyunpack
#用pip命令安装patool模块
!pip install patool
from pyunpack import Archive
#用Archive类创建一个cat_dog.rar文件的对象,然后调用extractall方法将其解压缩到指定的路径中
Archive('/content/cat_dog.rar').extractall('/content/drive/MyDrive/Zhuangzicong/cat_dog')

定义一个LeNet5深度神经网络模型类,并实现其前向传播(forward)方法

import torch.nn.functional as F

class LeNet5(nn.Module):
    def __init__(self):
        super(LeNet5, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, 5)
        self.pool1 = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(16, 32, 5)
        self.pool2 = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(32*5*5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = self.pool1(x)
        x = F.relu(self.conv2(x))
        x = self.pool2(x)
        x = x.view(-1, 32*5*5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

定义一个ResNet34的深度神经网络模型,并加载训练和验证数据集

num_workers = 2
batch_size = 32

# lenet
# net = LeNet5()

# resnet34
net = models.resnet34(pretrained=True)
net.fc = nn.Linear(512,2,bias=True)


net = net.to(device)

criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(net.parameters(),lr=0.001)

train_data = CatDogDataset(train_dir,transform=transform)
print(train_data.__len__()) # 20000
train_dataloader = DataLoader(dataset=train_data,shuffle=True,num_workers=num_workers,batch_size=batch_size,pin_memory=True)

val_data = CatDogDataset(val_dir,transform=transform)
val_dataloader = DataLoader(dataset=val_data,shuffle=True,num_workers=num_workers,batch_size=batch_size,pin_memory=True)

开始训练

net.train() # BN参数
for epoch in range(15):  # 重复多轮训练
    for i,(img,label) in enumerate(train_dataloader):
      img = img.to(device)
      labels = label.to(device)
      # 优化器梯度归零
      optimizer.zero_grad()
      # 正向传播+反向传播+优化
      outputs = net(img)
      loss = criterion(outputs,labels)
      loss.backward()
      optimizer.step()
    # 输出统计信息
    print('Epoch: %d loss: %.3f' %(epoch+1,loss.item()))

print('Finished Training')

预测结果

  通过得分可以看到,使用ResNet比LeNet效果更好

第三部分 思考题

1、Residual learning 的基本原理?

  残差学习是一种用于训练深度神经网络的技术,它可以有效地解决网络退化(degradation)问题,即随着网络深度的增加,模型的性能反而下降。残差学习的核心思想是引入残差连接(residual connection),也称为快捷连接(shortcut connection),让神经网络可以学习输入和输出之间的残差(residual),而不是直接学习映射函数(mapping function)。残差连接可以跨越一个或多个层,将上一层或几层的输出与本层的输出相加,形成一个残差块(residual block)。

2、Batch Normailization 的原理,思考 BN、LN、IN 的主要区别。

  BN是一种用于深度神经网络中的数据归一化方法,它可以加速模型的收敛速度,提高模型的泛化能力,避免梯度消失或梯度爆炸等问题。BN的基本思想是在每个批次(batch)的数据中,对每个特征维度进行归一化处理,使其均值为0,方差为1,并且引入两个可学习的参数,分别用于缩放和平移归一化后的数据。这样,BN可以减少内部协变量偏移(Internal Covariate Shift),即网络层之间输入分布的变化,从而使得网络更容易训练。

  BN与LN和IN的主要区别在于归一化的维度和范围不同。LN是在每个样本(instance)中,对所有特征维度进行归一化处理,而不考虑不同样本之间的差异。LN适用于循环神经网络(Recurrent Neural Network,RNN),因为RNN中每个时间步的输入分布可能不同,而BN假设每个批次中的输入分布相似。IN是在每个样本中,对每个通道(channel)进行归一化处理,而不考虑不同通道之间的差异。IN适用于风格迁移(Style Transfer),因为不同风格的图像可能有不同的通道分布,而BN假设每个批次中的通道分布相似。
3、为什么分组卷积可以提升准确率?即然分组卷积可以提升准确率,同时还能降低计算量,分数数量尽量多不行吗?

  分组卷积是一种在深度神经网络中使用多个卷积核(kernel)的技术,它可以增加网络的宽度(width),从而提高网络的表达能力和泛化能力。分组卷积的原理是将输入通道(channel)和输出通道分成若干个组(group),每个组内的卷积核只与对应的输入通道进行卷积,然后将各个组的输出通道拼接起来,形成最终的输出。这样,每个卷积核只需要处理一部分的输入通道,从而减少了参数数量和计算量,同时也增加了特征的多样性和冗余性,有利于网络学习更丰富和鲁棒的特征。

  并不是基数越大越好,因为过大的基数可能导致过拟合(overfitting)或者欠拟合(underfitting)等问题。因此,在实际应用中,需要根据实验结果和经验来选择合适的基数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OUC数据库复习CSDN是指在中国软件开发者社区CSDN上,通过学习和复习中国海洋大学(OUC)数据库相关的知识。 中国海洋大学数据库课程是计算机相关专业的重要课程之一,强调学生对数据库的理论知识和实践技能的掌握。学生在学习数据库课程期间,可以通过CSDN平台上的相关资源进行复习。 CSDN是中国最大的技术社区之一,拥有大量的技术博客、论坛和教程资源。在CSDN上,有很多关于数据库的博文和教程,涵盖了数据库的基本概念、SQL语言、存储过程、触发器等方面的知识。这些博文和教程不仅可以帮助学生复习数据库的各个方面,还能够深入了解数据库的应用和开发技巧。 另外,CSDN上还有一些数据库相关的实例教程和项目案例,可以帮助学生将理论知识转化为实际应用。这些教程和案例提供了数据库在不同领域的应用实例,如电子商务、社交网络、医疗健康等,能够帮助学生更好地理解数据库的实际应用场景。 通过在CSDN上复习OUC数据库课程,学生可以获得更广泛的数据库知识,并与其他开发者交流和分享经验。另外,CSDN还提供了一些数据库技术的最新动态和行业趋势,帮助学生了解数据库领域的最新发展。 综上所述,OUC数据库复习CSDN是一种便捷高效的学习方式,学生通过CSDN平台可以找到大量的数据库相关资源,帮助他们巩固和提升数据库知识和技能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值