PyTorch代码测试以及螺旋数据分类

(写在前面)我将个人的思考总结和截图放在一起写,用来展现一个完整的学习过程

Pytorch代码

image
首先挂载在谷歌云盘上,然后修改为GPU运行后,开始测试代码(由于与例子大量重复,只写我感觉较为重要的点)
image
image
做到这里时,我有点疑惑,@是对tensor进行矩阵相乘,那m是一个2x4的矩阵,v是一个1x4的矩阵,按理不能相乘。在查阅资料以及跟好兄弟讨论之后,发现这里的@类似于dot()运算,是将m的第一行看作一个向量,再与v这个向量来进行点乘,得到结果(如果此处理解有误,还请老师指正)
image

transpose() 是对维度进行的操作,在pytorch中只能操作两个维度

image

2.螺旋数据分类

初始化样本:
image
image
(还蛮好看的)
image
image
image

由于nn包创建了线性函数之后,采用的是单层神经网络分类,对于非线形的数据不能较为精确的拟合,模型的准确率只有50.4%,从图像上来看,也是分割的不精确且是用线形的表示来分割的。
关于为什么需要在反向传播前手动将梯度清零,在结合视频以及知乎回答来看,pytorch会有一个梯度的累加机制,若不清零,训练的结果在反向传播过程中,不断累加,就会影响最终结果。但有些时候,这个机制也能用于实现batchsize的变相放大,对内存十分友好。
image
image
可以明显看到,增加了一个隐层之后,模型的准确率来到了94.9%,双层网络实现了非线形函数的拟合和学习,使得其对于这样一个螺旋分类的样本有了更精确的判断,这点从图片也很明显的看出来。

posted @ 2021-10-07 21:46  THeS  阅读(328)  评论(0)    收藏  举报