暑期培训 第一周

文章介绍了PyTorch中张量的定义与操作,包括数据初始化、张量操作、转置和拼接。接着讨论了螺旋数据分类问题,通过线性模型和两层神经网络展示分类效果,强调ReLU激活函数在防止梯度消失和提升性能上的优势。最后,文章总结了AlexNet的特点,如ReLU、GPU并行、LRN和overlappingpooling,以及激活函数、网络深度、优化器SGD与Adam的作用。
摘要由CSDN通过智能技术生成

第一部分:代码练习

1.1 pytorch 基础练习

1.1.1定义数据

首先导入torch库,方便使用各种函数定义数据,一般定义数据使用torch.Tensor , tensor的意思是张量,是数字各种形式的总称

以下是分别使用torch.ones和torch.empty,torch.rand定义一个值全唯一的三维张量,一个二维空张量,一个值随机生成的二维张量

基于现有张量,利用tensor new_*方法建立新张量,并利用原有张量的dtype和device

1.1.2定义操作

创建一个2✖️4的张量,并赋值,调用size函数返回行和列的值,以及整个大小用‘--’隔开输出结果

 

用:省略行这个参数,返回第一列的全部元素

 用arange函数创建一个从一数到五但是不包括五的张量v,用m和v做数积,会报错期待数积是float类型,但v是long类型,所以将v定义为float类型,得到数积结果

 

给m加上一个用rand函数随机生成数值的2✖️4的张量,最后得到结果

使用函数t或者transpose进行张量的转置,由于m是二维的,相当于交换了x和y轴,transpose重的参数0和1分别代表x轴和y轴

返回一个一维张量,起始值为3,终点值为8,步数为20且等间距。

使用matplotlib的pyplot函数画出随机生成数的显示图,并当数据足够的多的时候,会呈现正态分布的趋势

使用cat函数进行张量的拼接,0代表在y方向拼接,增加行数,1代表在x方向拼接,增加列数

1.2 螺旋数据分类

引入基本库,并初始化各个重要参数,同时打印torch是在gpu还是cpu运行

初始化X特征矩阵和Y样本标签,X的行数为整个样本数量所以为N✖️C,列数为样本的纬度所以为D,使用两层循环分别将样本的坐标存入X,将样本类别存入Y

最后可视化数据

1.2.1 构建线性模型分类

 训练1000次,损失太高,准确率只有百分之五十,相当于随机

第一行代码看到模型的预测结果,为[3000, 3]的矩阵。每个样本的预测结果为3个,保存在 y_pred 的一行里。值最大的一个,即为预测该样本属于的类别

第二行代码输出第十行的情况,第一列是三个预测结果

score, predicted = torch.max(y_pred, 1)

上述代码表示,三个预测结果中的最大值储存在score中,第十行为-0.0609最大,储存在score中,参数1代表y方向,也就是列,第几列最大会储存在predicted中,第十行第一列最大也就是0列,储存在predicted中

第一行代码将模型输出,看到有两层

  • 第一层输入为 2(每个样本特征维度D为2),输出为 100(神经网络里隐层单元的数量H为100);
  • 第二层输入为 100 (上一层的输出),输出为 3(样本类别数C)

从下面图示以及实验结果可以看出,线性模型的准确率最高只能达到 50% 左右,对于这样复杂的一个数据分布,线性模型难以实现准确分类。所以我们构建两层神经网络分类。

1.2.2 构建两层神经网络分类

在线性模型的基础上加入relu激活函数,构建了两层神经网络,其他代码没有任何改变,同样训练一千次,损失大幅下降,准确率大幅提高,达到95%左右,同时从最终的可视化结果也可以看出效果很不错

第二部分:问题总结 

 1、AlexNet有哪些特点?为什么可以比LeNet取得更好的性能?


AlexNet在激活函数上选取了非线性非饱和的relu函数,在训练阶段梯度衰减快慢方面,relu函数比传统神经网络所选取的非线性饱和函数(如sigmoid函数,tanh函数)要快许多。

AlexNet在双gpu上运行,每个gpu负责一半网络的运算

采用局部响应归一化(LRN)。对于非饱和函数relu来说,不需要对其输入进行标准化,但Alex等人发现,在relu层加入LRN,可形成某种形式的横向抑制,从而提高网络的泛化能力。

池化方式采用overlapping pooling。即池化窗口的大小大于步长,使得每次池化都有重叠的部分。这种重叠的池化方式比传统无重叠的池化方式有着更好的效果,且可以避免过拟合现象的发生

因为alexnet采用relu激活函数,而lenet采用sigmoid函数,同时池化方式前者是maxpooling后者是avgpooling,一个是重叠池化,一个是传统的无重叠池化,alexnet增加了池化层,卷积层,全连接层,网络变得更深更胖了。

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


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

 

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


 某一层的激活函数导数过小,相乘导致结果趋近于零,无法更改模型,也就是梯度消失

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


更深更好,因为深度的增加带来的贡献是指数性的,宽度的增加只是线性的,指数性增长强于线性增长 

 

5、为什么要使用Softmax?


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

6、SGD 和 Adam 哪个更有效?


在数据统计特性明显,分布好计算(估计)的时候,容易调整SGD的参数,使得SGD收敛好,优先使用SGD。在数据统计特性不好,变化大,误差曲面复杂的时候,优先使用ADAM

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值