OUC2022秋季软件工程第12组第二周作业

本博客为OUC2022秋季软件工程第二周作业

一、视频学习心得及问题总结

1、学习心得

通过学习两个视频,我们小组主要了解到以下几个方面:

  • 了解了不同国家针对人工智能军备竞赛的投入以及人工智能人才的供给不足的现状;对人工智能的概念有了清晰的认知。

  • 了解了从专家系统到机器学习、从传统机器学习到深度学习的变化历程。

  • 了解到人工智能的三个层面:

    • 计算智能:计算机具有快速计算和记忆储存的能力

    • 感知智能:类似于人的视觉、听觉的、触觉等感知能力

    • 认知智能:概念、意识、观念都是认知智能的表现

  • 了解了计算机视觉和机器学习,知道了什么是监督学习、无监督学习、半监督学习、强化学习。

  • 了解了深度学习是机器学习的一种,而机器学习只是实现人工智能一种手段,深度学习的关键在于应用于解决实际生活的问题。

  • 深度学习可以应用于视觉和语言,使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步

  • 深度学习算法输出不稳定,容易被攻击,模型复杂度高,难以纠错和调试,对开放性推理问题无能为力。

  • 人类知识无法有效引入进行监督,数据自带的不平等将会导致机器偏见。

综上,我们了解到深度学习的实质,是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。所以说人工智能和深度学习是在互相推动中螺旋前进,纵使二者尚有不足,但将会逐步得到解决和提升。

2、问题总结

观看视频后,我们小组存在以下几个问题:

  • 未来人工智能的发展将向着什么方向前进,又将如何与我们的生活接轨;

  • 大学相关专业该如何设置,智能科学与技术专业与人工智能的关系是怎样的?

  • 许多概念的理解不太到位。

二、代码练习

1、pytorch 基础练习

1.1 定义数据

一般定义数据使用torch.Tensor

OUC2022秋季软件工程第12组第二周作业_第1张图片

OUC2022秋季软件工程第12组第二周作业_第2张图片

Tensor支持各种各样类型的数据 ,而且创建Tensor也有多种方法,可以现用现查。

OUC2022秋季软件工程第12组第二周作业_第3张图片

OUC2022秋季软件工程第12组第二周作业_第4张图片

OUC2022秋季软件工程第12组第二周作业_第5张图片

 1.2 定义操作

OUC2022秋季软件工程第12组第二周作业_第6张图片

 从中可以看到,tensor同样支持下标索引和数组切片操作。

OUC2022秋季软件工程第12组第二周作业_第7张图片

这里所尝试的是数学定义上的矩阵相乘,可以看到最后两种计算产生的结果值相同,但一个是数组,一个是数值。

OUC2022秋季软件工程第12组第二周作业_第8张图片

OUC2022秋季软件工程第12组第二周作业_第9张图片

OUC2022秋季软件工程第12组第二周作业_第10张图片

OUC2022秋季软件工程第12组第二周作业_第11张图片

把randn函数的参数修改为 10**6(较大的数),图像会非常接近正态分布

OUC2022秋季软件工程第12组第二周作业_第12张图片

OUC2022秋季软件工程第12组第二周作业_第13张图片

 通过以上的所有代码,我们简单地学习了pytorch的一些使用方法,感觉和numpy在风格上 十分相似,可以类比来学。

 2、螺旋数据分类

2.1 实验过程

2.1.1 下载绘图函数到本地

OUC2022秋季软件工程第12组第二周作业_第14张图片

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

OUC2022秋季软件工程第12组第二周作业_第15张图片

 2.1.3 初始化X和Y

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

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

OUC2022秋季软件工程第12组第二周作业_第16张图片

 2.1.4 数据可视化

OUC2022秋季软件工程第12组第二周作业_第17张图片

2.1.5 构建线性模型分类

OUC2022秋季软件工程第12组第二周作业_第18张图片

2.1.6 有关函数的说明 

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

score, predicted = torch.max(y_pred, 1) 是沿着第二个方向(即X方向)提取最大值。最大的那个值存在 score 中,所在的位置(即第几列的最大)保存在 predicted 中。下面代码把第10行的情况输出,此外,大家可以看到,每一次反向传播前,都要把梯度清零。

OUC2022秋季软件工程第12组第二周作业_第19张图片

 2.1.7 训练模型的可视化

OUC2022秋季软件工程第12组第二周作业_第20张图片

上面使用 print(model) 把模型输出,可以看到有两层:

  • 第一层输入为 2(因为特征维度为主2),输出为 100;
  • 第二层输入为 100 (上一层的输出),输出为 3(类别数)

从上面图示可以看出,线性模型的准确率最高只能达到 50% 左右,对于这样复杂的一个数据分布,线性模型难以实现准确分类。

2.1.8 构建两层神经网络分类

OUC2022秋季软件工程第12组第二周作业_第21张图片

2.1.9 模型可视化

OUC2022秋季软件工程第12组第二周作业_第22张图片

2.2 实验感想

做完整个试验后,我们小组内整理出如下几个问题:

  • 没有理解@操作,在程序执行过程中出现问题。

  • 对学习的理解不是很深刻,主要是观看他人的博客完成的,实验代码也是直接复制粘贴。

  • 没有看明白是怎样构建的模型,特别是第二个螺旋数据分类

  • 不太理解ReLU激活函数的使用

你可能感兴趣的:(软件工程)