2023秋软件工程个人作业2

这个作业属于哪个课程 中国海洋大学2023秋软件工程
这个作业要求在哪里 第二次作业:深度学习和 pytorch 基础
这个作业的目标 pytorch 的一些基础操作,深度学习,浅层神经网络

一、视频学习

1.1 绪论:

从专家系统到机器学习,从传统机器学习到深度学习,深度学习的能与不能

1.2 深度学习概述:

浅层神经网络,生物神经元到单层感知器,多层感知 器,反向传播和梯度消失。神经网络到深度学习:逐层预训练,自编码器和 受限玻尔兹曼机

二、代码练习

2.1、pytorch基础练习

2.1.1 定义数据

用torch.Tensor 定义数据:

1、一个数

image-20231001154249098

2、一维数组

image-20231001154720715

3、二维数组

image-20231001154741901

4、张量

image-20231001154759864

创建Tensor的其他方法:

1、创建一个空张量

image-20231001154903099

2、创建一个随机初始化的张量

image-20231001154923650

3、创建一个全0的张量,里面的数据类型为 long

image-20231001154935549

4、基于现有的tensor,创建一个新tensor,从而可以利用原有的tensor的dtype,device,size之类的属性信息

image-20231001154952765

5、利用原来的tensor的大小,但是重新定义了dtype

image-20231001155009436

2.1.2定义操作

1、创建一个 2x4 的tensor

image-20231001155518435

2、返回 m 中元素的数量

image-20231001155529997

3、返回第0行,第2列的数

image-20231001155541809

4、返回第1列的全部元素

image-20231001155553623

5、返回第0行的全部元素

image-20231001155605091

6、Create tensor of numbers from 1 to 5(生成从1to4的数)

image-20231001155615893

7、Scalar product(标量积)

image-20231001162052475

image-20231001162424210

8、Calculated by 12 + 25 + 33 + 47

image-20231001162455802

9、Add a random tensor of size 2x4 to m

image-20231001155631826

10、转置,由 2x4 变为 4x2;或者用transpose也可以

image-20231001155959122

11、returns a 1D tensor of steps equally spaced points between start=3, end=8 and steps=20在这里插入图片描述

image-20231001160013630

12、下面是生成 1000 个随机数,并按照 100 个 bin 统计直方图在这里插入图片描述

image-20231001160043486

13、当数据非常非常多的时候,正态分布会体现的非常明显

image-20231001160056821

14、创建两个 1x4 的tensor。在 0 方向拼接 (即在 Y 方各上拼接), 会得到 2x4 的矩阵

image-20231001160107377

15、在 1 方向拼接 (即在 X 方各上拼接), 会得到 1x8 的矩阵

image-20231001160114630

2.1.3实验体会

1、学习了pytorch 的一些基础操作,但是由于是按照操作手册做的,对于其中一些函数的具体调用如参数传递和返回值的类型等等还有待进一步深入学习

2、在2.7运行代码时发现了报错,查阅csdn相关博客发现是数据类型出错,torch.arange()产生的数据类型为Long型,而torch.Tensor()产生的为float型。
解决方法参考了:http://t.csdn.cn/SE1hf
经过查找之后发现可以通过float()函数将v中的数据从Long转为float型再与m实现标量积

2.2、螺旋数据分类

1、实验过程

1、下面代码是下载绘图函数到本地

image-20231001160525943

2、引入基本的库,然后初始化重要参数

image-20231001160707943

3、初始化 X 和 Y
X 可以理解为特征矩阵,Y可以理解为样本标签。 结合代码可以看到,X的为一个 NxC 行, D 列的矩阵。C 类样本,每类样本是 N个,所以是 N*C 行。每个样本的特征维度是2,所以是 2列。

在 python 中,调用 zeros 类似的函数,第一个参数是 y方向的,即矩阵的行;第二个参数是 x方向的,即矩阵的列,大家得注意下,不要搞反了。下面结合代码看看 3000个样本的特征是如何初始化的。

image-20231001160755833

4、打印图像

image-20231001160811859

5、构建线性模型分类

image-20231001161157473

6、模型的预测结果
使用 print(y_pred.shape) 可以看到模型的预测结果,为[3000, 3]的矩阵。每个样本的预测结果为3个,保存在 y_pred 的一行里。值最大的一个,即为预测该样本属于的类别

score, predicted = torch.max(y_pred, 1) 是沿着第二个方向(即X方向)提取最大值。最大的那个值存在 score 中,所在的位置(即第几列的最大)保存在 predicted 中。下面代码把第10行的情况输出

image-20231001161217071

7、Plot trained model

image-20231001161239080

8、构建两层神经网络分类

image-20231001161256574

9、Plot trained model

image-20231001161316585

大家可以看到,在两层神经网络里加入 ReLU 激活函数以后,分类的准确率得到了显著提高。

2、实验体会

ReLU激活函数(线性整流函数)

通过查询资料ReLU激活函数(线性整流函数)_relu激活函数形式-CSDN博客对ReLU激活函数(线性整流函数)有了初步的了解。

通过ReLU函数实现了单侧抑制的操作,使得神经网络中的神经元具有了稀疏激活性。通过ReLU实现稀疏后的模型能够更好地挖掘相关特征,拟合训练数据。这也是前后两次打印模型所显示出差别的重要原因。

三、问题总结

1、激活函数有哪些作用?

激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。

2、 梯度消失现象是什么?

梯度消失现象是指在深层神经网络中,反向传播算法中的梯度逐渐变小,并最终趋近于零的现象。这意味着在更新网络权重时,底层神经元的梯度信息几乎无法传递到较浅的层,导致深层网络的训练变得困难。

3、神经网络是更宽好还是更深好?

更宽的神经网络指的是增加每一层神经元的数量,增加网络的宽度。这样可以增加网络的表示能力,使其能够更好地拟合复杂的数据特征。更宽的网络通常具有更多的参数和更高的计算成本,但相对来说训练较为容易。

更深的神经网络指的是增加网络的层数,增加网络的深度。这样可以引入更多的非线性变换,并且可以构建更复杂的特征表示。深层网络通常可以学习更抽象的特征,并能够在训练集上取得更好的性能。然而,深层网络容易出现梯度消失或梯度爆炸的问题,对训练的要求更高。

4、为什么要使 用Softmax?

加softmax函数是因为它可以将所有类别打分都限制在【0,1】之间,而且所有类别打分和是1,这样就可以将最终输出结果看做是该类别的概率,于是就可以将实际情况与预测情况进行比较来对网络进行调节

5、SGD 和 Adam 哪个更有效?

Adam在训练集上的准确率较高,SGDM在测试集上的准确率较高 Adam的速度更快,但SGDM能够得到好的效果

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2023 Fei Wang
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信