当前位置: 首页 > news >正文

OUCAILab‘s Book第一章第二章

OUCAILab's Book第一章第二章


第一章:深度学习基础

【第一部分:代码练习】螺旋数据分类,关键步骤截图,并附一些自己的想法和解读。
1.plot_lib是一个很方便的函数,不仅可以很方便的展示数据集的分布,还可以展示模型的分类边界
2.在加入relu函数之后,模型的优化器也做了变化,从之前的SGD改为了Adam优化器,使用相同的学习率等参数,Adam能够轻易的越过“50%”的槛,而即使添加了ReLU函数后,使用相同的参数的SGD仍然难以跨过“50%”的难关,将学习率调大到0.1才可以真正的跳出局部最优,造成差异的原因是由于自适应学习率的特性,Adam在初期训练阶段通常比SGD收敛得更快,能够更快找到最优解。

【第二部分:问题总结】思考下面的问题:​
1、AlexNet有哪些特点?为什么可以比 LeNet 取得更好的性能?​
(1)AlexNet的网络层数增加到了8,并且使用224*224的图像进行训练,适用于处理更复杂的数据集
(2)AlexNet使用ReLU激活函数,而LeNet 使用的是sigmold函数,Sigmoid在网络较深时会出现梯度弥散问题导致在处理深度网络时出现梯度消失的问题
(3)AlexNet引入了Dropout方法来随机丢弃部分神经元,降低模型复杂度,从而有效防止过拟合
(4)AlexNet通过图像增广技术(如翻转、裁剪、颜色变化)扩展了训练数据集,提高了模型的泛化能力
2、激活函数有哪些作用?​
激活函数是神经网络中的核心组件,其主要作用是为模型引入非线性特性,从而使网络能够学习和表达复杂的特征与关系。如果没有激活函数,神经网络的输出将只是简单的线性变换,无论网络有多少层,其本质上等同于一个线性模型,无法处理复杂的非线性问题。
3、梯度消失现象是什么?​
在反向传播进行更新网络层参数时,需要使用到链式求导法则对激活函数进行求导,如果此部分大于1,那么层数增多的时候,最终的求出的梯度更新将以指数形式增加,即发生梯度爆炸,如果此部分小于1,那么随着层数增多,求出的梯度更新信息将会以指数形式衰减,即发生了梯度消失。
4、神经网络是更宽好还是更深好?​
相比于增加宽度,增加深度通常更具优势。深层网络通过逐层抽象特征,能够更好地捕捉数据的全局模式,从而提高对新数据的适应能力;深层网络的每一层可以专注于学习不同层次的特征、捕捉更复杂的模式和语义信息。但是过深的网络可能导致梯度消失或爆炸问题,影响训练效果;过窄的网络可能限制网络特征提取能力。
5、为什么要使用Softmax?​
将全连接的输出转换为概率,概率可以更好地进行反向传播和模型迭代,并且模型的输出有时并不是肯定的,存在某几个标签的结果非常接近的情况,模型有必要说明它们都处于“候选”。
6、SGD 和 Adam 哪个更有效?​
虽然在1e-3时SGD优化器的准确率被困在50%左右
​将SGD的学习率调为 1 后,模型在1000次的epoch中在训练集上可以达到99.6%的准确率
在这里插入图片描述
在这里插入图片描述
在​将Adam的学习率调为 1 后,模型在300次的epoch中在训练集上可以达到99.9%的准确率
在这里插入图片描述
在这里插入图片描述
SGD通常需要手动调整学习率,并且可能会使用如学习率衰减这样的技巧来帮助模型收敛。学习率的选择对SGD的性能影响很大;尽管Adam在许多任务中都显示出了较快的收敛速度,但一些研究表明,对于某些问题,Adam可能导致过拟合,泛化能力不如SGD。例如上图有隐隐的过拟合趋势。

第二章:卷积神经网络
一、实验3:使用CNN对MINIST数据集分类
1.data_loader需要使用torch.utils.data.DataLoader方法进行包装,传入的参数中shuffle在训练集中一般为True,防止模型过拟合,提高鲁棒性。
2.transforms.Compose中组合了需要对数据进行的预处理,而其中transforms.ToTensor 是一个常用的变换操作,作用有三个:(1)用于将图像数据转换为张量,并把通道数提前。(2)转换数据的数据类型。(3)将[0,255]的数据归一化到[0.0, 1.0]
3.数据的形状为batch_size2828,使用x = x.view(-1, self.input_size)即可将数据转换为batch_size784的形状
4.maxpool最大池化层的步长默认为卷积核大小
x = self.conv1(x)
x = F.relu(x)
x = F.max_pool2d(x, kernel_size=2)
x = self.conv2(x)
x = F.relu(x)
x = F.max_pool2d(x, kernel_size=2)
将batch_size
12828的数据经过上面的网络层后得到的形状为
在这里插入图片描述
[[batch_size,n_features,4,4]
通过下面的代码就可以转换为[batch_size,n_features* 4* 4]
x = x.view(-1, self.n_feature44)
5.
使用线性层组成的网络FC2Layer对数据集进行训练
得到的结果为
在这里插入图片描述
使用卷积神经网络对数据集进行训练得到的结果为在这里插入图片描述
卷积神经网络相比于传统神经网络可以更好地提取图像的特征,并且训练的参数也会变少

而打乱像素顺序后神经网络的性能相比于传统网络的性能下降的更多,因为神经网络中的卷积层会利用图像的局部特征来学习。
二、实验4:使用LeNet对CIFAR10数据分类
在这里插入图片描述

三、实验5:使用VGG对CIFAR10分类
通过以下代码可以很方便的实现模块化设计,在需要卷积的部分,卷积层、BN层和ReLU层构成一个模块,而最大池化层单独构成一个模块。在每个模块后再添加平均池化层。

def _make_layers(self, cfg):layers = []in_channels = 3 for x in cfg:if x == 'M':layers += [nn.MaxPool2d(kernel_size=2, stride=2)]else:layers += [nn.Conv2d(in_channels, x, kernel_size=3, padding=1),nn.BatchNorm2d(x),nn.ReLU(inplace=True)]in_channels = xlayers += [nn.AvgPool2d(kernel_size=1, stride=1)]return nn.Sequential(*layers)

在这里的代码中,依然是对CIFAR-10做处理
在这里插入图片描述
但是模型在最后的全连接层出现了错误
在这里插入图片描述
检查后发现是形状为[batch_size,512,2,2]的数据经过最后一层最大池化后会变成[batch_size,512,1,1],因此我将最后一层最大池化删去。

【第二部分:问题总结】思考下面的问题:​

1.dataloader ⾥⾯ shuffle 取不同值有什么区别?​
当 shuffle 为 True 时,表示每个 epoch 加载数据时会随机打乱数据的顺序;当 shuffle 为 False 时,表示每个 epoch 加载数据时按照原始顺序加载。在训练模型的过程中,为了避免模型对数据顺序的依赖性,一般将shuffle设置为True,使得模型能够充分学习数据的特征,并减少模型过拟合的可能性。
2.transform ⾥,取了不同值,这个有什么区别?​
transform中需要输入对数据集进行的预处理,transforms.Compose中是预处理的组合。
实验三和实验四中,transforms.Compose都只进行了两步操作:将图片转换为模型能够处理的张量和标准化处理;
而在实验五中,还对数据进行了RandomCrop随机裁剪和RandomHorizontalFlip随机水平翻转,目的都是为了进行数据增强
3.epoch 和 batch 的区别?​
epoch 指的是整个训练数据集完成一次前向传播和一次反向传播的过程,也就是训练的次数;batch是每次训练模型中每次更新模型使用的一小部分数据,batch_size决定了要把数据分为多少部分,每个部分的数据量为batch
4.1x1的卷积和 FC 有什么区别?主要起什么作⽤?​
1x1的卷积的输入为多维特征图,输出也为特征图,通过更改输出通道数可以实现更改通道数的效果,通过更改步长也可以减小高宽;FC 的输入是一维向量,输出也是一维向量,主要用于将特征整合为固定维度。
5.residual leanring 为什么能够提升准确率?​
为了解决随着网络加深出现的梯度爆炸和梯度消失问题,resnet实现了跳跃连接,将跨过了一些层的恒等映射与这些层的结果相加,网络的性能至少不会更差,这是作者最原始的想法。
6.代码练习⼆⾥,⽹络和1989年 Lecun 提出的 LeNet 有什么区别?​
下图是LeNet的网络图
在这里插入图片描述
而下图是实验二中的网络图在这里插入图片描述
差别为实验二中使用的是彩色图像,有三个通道,因此第一个conv2d的参数中in_channels=3

7.代码练习⼆⾥,卷积以后feature map 尺⼨会变⼩,如何应⽤ Residual Learning?​
这就需要用到前面提到过的1x1的卷积,将步长调为2后,就可以实现高宽减半
8.有什么⽅法可以进⼀步提升准确率?
对数据集进行预处理和数据增强提高泛化能力,根据任务更改损失函数和优化器,选择合适的学习率、batch_size等参数,更改网络的结构等。

http://www.dtcms.com/a/448016.html

相关文章:

  • 网站建设与维护工作待遇知名男艺人工作室
  • 郑州做网站优化的公司网站如何做等级保护
  • 多终端响应式网站百度指数平台
  • 外贸网站的推广方法品牌网络
  • 哪些公司需要做网站网站建设哪个平台好
  • 龙武工会网站怎么做php整站开发 企业网站教程
  • 如何在网站做电子杂志怎么查工程项目信息
  • 东莞网络网站建设海底捞网络营销方式
  • 广州静态管理班级优化大师是干什么用的
  • 大气企业网站源码php中企动力总部在哪里
  • 企业网站管理系统php源码wordpress移动端页面模板
  • .net php开发网站开发免费微信小程序开店
  • 做得好的网站建设公司wordpress 淘宝同步
  • 河南夏邑网站建设宜春做网站的公司哪家好
  • 做学校网站素材图片素材手机网站排行榜
  • 内容展示型网站 设计特点黄石手机网站建设
  • 广州市越秀区建设局网站网上注册公司流程工商
  • 网站备案的服务器上海的做网站的公司
  • 沧州网站群自己做淘宝返利网站
  • 肇庆市有那家做网站的联想官方服务网站
  • 赤峰市建设厅官方网站浅析我国门户网站建设不足
  • 网站建设捌金手指专业8郑州心理咨询中心
  • 大良营销网站建设新闻网站排名优化课程
  • seo的网站找it工作有什么好的招聘网站
  • 设计网站页面注意事项微信营销的方式有哪些
  • 做网站都有那些步骤argo wordpress主题
  • 视频网站调用湖北网站推广
  • 建设网站你认为需要注意哪些问题推广下载app
  • 公司注册一站式平台网站建设平台接单
  • 建设银行网站无法转账泰兴网站推广