♥先说一些废话,从考完研之后第一次学习,摆烂太久了,啥也不想干,进度很慢很慢,希望有所改善TAT
一、定义数据
定义数据使用torch.Tensor , tensor的意思是张量,是数字各种形式的总称。
Tensor支持各种各样类型的数据,包括:
torch.float32, torch.float64, torch.float16, torch.uint8, torch.int8, torch.int16, torch.int32, torch.int64.
创建Tensor有多种方法,包括:ones, zeros, eye, arange, linspace, rand, randn, normal, uniform, randperm
下面试了几种
二、定义操作
- 基本运算,加减乘除,求幂求余
- 布尔运算,大于小于,最大最小
- 线性运算,矩阵乘法,求模,求行列式
基本运算包括: abs/sqrt/div/exp/fmod/pow ,及一些三角函数 cos/ sin/ asin/ atan2/ cosh,及 ceil/round/floor/trunc 等具体在使用的时候可以百度一下
布尔运算包括: gt/lt/ge/le/eq/ne,topk, sort, max/min
线性计算包括: trace, diag, mm/bmm,t,dot/cross,inverse,svd 等
上面试了Colab,下面在pycharm实现
♥要注意Tensor和tensor所生成的数据类型不同
变成100000个随机数
三、Spiral classifciation
一开始没看到这俩for循环是嵌套,以为是并列,怎么画都一个旋🤦♀️
线性模型分类
很明显能看出,用线性模型准确率最多达到0.504这哪行啊,下面即引入激活函数,增加网络的非线性性,增加网络复杂度来提高准确率。
构建两层神经网络分类
模型中间添加了ReLu激活函数,并且把SGD优化算法换成了Adam优化,准确率明显上升,损失率下降。
问题总结
1、AlexNet有哪些特点?为什么可以比LeNet取得更好的性能?
♥AlexNet网络有8层,其中包括5层卷积和2层全连接隐藏层,以及1个全连接输出层,像是一个更深更大的LeNet。
♥AlexNet使用了ReLu激活函数来代替sigmoid和tanh函数,计算更简单,使网络有更快的收敛速度。
♥AlexNet使用了Dropout进行随机失活,降低模型复杂度和不稳定程度,避免过拟合。
♥使用了GPU加速,训练速度更快。
2、激活函数有哪些作用?
激活函数的引入是为了增加网络的非线性性,复杂度,使之更加贴合实际。要是不加入激活函数,那整个网络就是一个线性的,但现实中很多东西并不全是能用线性表示。
3、梯度消失现象是什么?
随着网络层数的增加,准确率不升反降。
4、神经网络是更宽好还是更深好?
不一定,不同的模型要求适合不同的神经网络。
5、为什么要使用Softmax?
Softmax是最后输出的分类器,把网络的结果映射到(0,1)中,就像概率一样,并且之和为1,概率高的,这个样本就可能属于这个分类。
6、SGD 和 Adam 哪个更有效?
在上面这个模型我试了一下是Adam优化的更准确,但是我之前做了一个植物叶病害的图像分类模型是SGD优化的更好。所以应该是各有优缺点,具体选择应该根据具体问题和数据集的情况来决定。