目录
2.1 AlexNet有哪些特点?为什么可以比LeNet取得更好的性能?
1.代码练习
1.1 pytorch基础练习
第一部分就是简单关于pytorch中数据的定义和操作,主要就是孰能生巧,简单的知道有哪些方法,并且知道该怎么用,需要具体使用的时候直接查阅即可。
而当使用torch.empty方法创建张量的时候,由于该函数会分配一块内存空间用于存储张量的数据,但并不会对其进行初始化,所以张量中的元素值是未定义的,可能是任意值,所以会出现nan,表示一个无效的或未定义的数值。它是一种特殊的浮点数值,用于表示不可表示的或不确定的数值。
当我任意定义了两个张量并直接对其进行@运算的时候,发现会报错,如下图所示,是因为两个张量中的数据类型不一致,一个是32位的浮点数型,另外一个是64位的int型,需要进行类型转换之后才能成功计算。
1.2 螺旋数据分类
第一部分是数据的初始化,在定义中就标定样本数量为1000,类别为3,而每个样本的维度为2,因为每个维度又有自己相对应的权重,所以定义矩阵X的时候,就应该定义成1000*3x2的矩阵,方便后面进行矩阵运算。由于Y类似于样本标签的作用,所以定义为一个列向量即可。
初始化结束之后就可以构建网络进行数据的分类了,一般学习速率learning_rate初始值都定义成一个比较小的数,用来调整参数weight和bias,因为如果学习速率较大,会导致参数一下子变化过大的话就不太容易接近最优点,一直在最优点附近徘徊。
而通过以下两个图片的对比,我们可以发现加入了ReLU激活函数之后,分类的精确度有了明显的提升,从左边的0.504上升到右边的0.949。
可知ReLU函数的非线性特性使神经网络能够表示更加复杂的决策边界和模式。对于分类问题,非线性激活函数可以学习和表示非线性类别之间的分界面,提高了模型对数据的拟合能力。
2.问题总结
2.1 AlexNet有哪些特点?为什么可以比LeNet取得更好的性能?
ALexNet是大型网络结构,采用ReLU激活函数,不仅可以避免梯度消失问题提供了更好的收敛速度和模型训练时的非线性表示能力。相比于LeNet的浅层网络结构,AlexNet引入了更深的网络结构,能够提取更多层次的抽象特征,并且采用了更大的卷积核尺寸和多个卷积层的组合,增加了模型对于图像的抽象能力。
2.2 激活函数有哪些作用?
激活函数引入非线性,扩展神经网络的表达能力,激活神经元,缩放和规范化输出,以及提供分类和概率输出。
2.3 梯度消失现象是什么?
梯度消失是指在深层神经网络中,反向传播算法中的梯度逐层传递到浅层网络时,梯度值逐渐减小到接近于零的现象。这意味着底层的权重更新非常缓慢,导致网络学习过程变得困难或无法收敛到理想的解。
2.4 神经网络是更宽好还是更深好?
更宽的神经网络表达能力更强、拥有更好的拟合能力、而且训练起来较稳定,容易避免过拟合现象。
更深的神经网络特征表示更抽象,拥有更好的参数共享和泛化能力,在反向传播的时候可以更好的流经网络层次,减轻梯度消失和梯度爆炸的问题。
2.5 为什么要使用Softmax?
Softmax函数将神经网络的输出转化为每个类别的概率值,使得模型的预测结果具有直观的概率解释性,适用于多类别分类问题,当需要将输入样本分成多个互斥的类别时,Softmax能够将模型的输出进行有效的标准化和归一化,确保每个类别的概率值都在[0, 1]范围内,且概率之和等于1,同时,它与交叉熵等目标函数搭配使用,有利于模型训练和优化。
2.6 SGD 和 Adam 哪个更有效?
SGD(随机梯度下降):
- 优点:算法简单易懂,易于实现和解释。内存占用较少,适用于大规模数据集。
- 缺点:收敛速度相对较慢,可能陷入局部最优点,需要适当的学习率调整。
- 适用场景:小型数据集、线性模型或浅层神经网络、较低的计算资源和内存限制的情况下。
Adam(自适应矩估计):
- 优点:自适应调整学习率,适应不同的参数更新情况,有更好的收敛性。在处理大规模数据和高维模型时表现较好。
- 缺点:相较于SGD,计算复杂度和内存占用较高。
- 适用场景:大规模数据集、复杂的模型结构、计算资源相对充足的情况下。