3D机器学习(2):pytorch入门:pytorch优点,梯度下降法初步

1、pyTorch的好处:

1、 方便的使用GPU加速
3D机器学习(2):pytorch入门:pytorch优点,梯度下降法初步_第1张图片
生成a,b随机矩阵,进行矩阵乘法matmul。记录:结束时刻减去开始时刻,得到并打印使用时间,并说明是设备:CPU计算的,并说明结果矩阵的大小。
3D机器学习(2):pytorch入门:pytorch优点,梯度下降法初步_第2张图片
这一次,将设备改成cuda,进行GPU加速,同样记录时间,并且运行两次,因为第一次的计算时间包括初始化,第二次才是真正计算时间。
3D机器学习(2):pytorch入门:pytorch优点,梯度下降法初步_第3张图片
结果:cuda可用,且使用cuda后,速度从0.23秒变成了0.0049秒,快了50倍!
2、 自动求导
深度学习就是一个导数的编程,神经网络再深,也仅仅是函数的嵌套,对每一个权重求导在pytorch里是非常方便的。整个深度学习就是靠梯度算法撑起来的。之所以深度学习能力这么强,其实是因为它可以求解一个非常巨大的函数,而求解函数的方法就是梯度下降法。
3D机器学习(2):pytorch入门:pytorch优点,梯度下降法初步_第4张图片
比如我们现在要对上式y求偏导,分别对a,b,c求偏导。
3D机器学习(2):pytorch入门:pytorch优点,梯度下降法初步_第5张图片
首先引入自动求导。然后,新建a变量(这里a是1维张量),并将其赋值为1,并且需要对其求导。同样新建x/b/c并分别赋值为1/2/3。接着把y表示出来。打印:求导前a,b,c的梯度,然后用自动求导函数autograd.grad 进行对y的a/b/c偏微分,并且输出当a/b/c分别为0/1/2时的偏微分。
在这里插入图片描述
结果:当x=1, 当a/b/c分别为0/1/2,y 的偏微分分别为2,1,1
3、 常用网络层API
3D机器学习(2):pytorch入门:pytorch优点,梯度下降法初步_第6张图片
张量运算:分别为加法、乘法、矩阵乘法、展开、扩展、cat。
神经网络:全连接层、激活函数、2D卷积操作、激活函数、激活函数、交叉熵损失函数。

2、回归问题分类

1、 对于预测值处于(-无穷,+无穷)的问题叫做linear regration。
2、 对于预测值处于(0,1)的问题叫做logist regration。在linear regration基础上加上logist函数,把无穷大区间压缩到(0,1),用于概率问题。
3、 对于预测值处于(0,1),且总的输出之和为1,的问题叫做class regration。用于多分类问题。取概率最大的作为预测值。

3、梯度下降算法

梯度下降算法:只观测一到两个点的数据,则拟合函数误差较大,如果用数据组很多,则可以很好地拟合函数。
在这里插入图片描述
对于y=Wx+b-y的函数预测,即通过多组(x,y)观测值,求解(w,b),则可以定义损失函数如上所示,loss=(预测值-实际值)的平方,当loss函数取最小值时,w,b即为最优拟合值。所以这里把拟合函数问题变成了求损失函数极小值的问题。
3D机器学习(2):pytorch入门:pytorch优点,梯度下降法初步_第7张图片
定义一个函数,用于求解观测的平均误差。
1、 先初始化totalError=0,计算totalerror=(预测值-实际值)的平方,再除以观测组数N=float(len(points))得到每次观测的平均误差。
2、 这里为什么w’比w更接近实际值?或者说梯度下降算法为什么成立?这是因为,如果梯度=或者接近0时,意味着求导等于0,也就是说loss函数取到了极值。此时w’近似w,并处与稳定。但如果某一点斜率向上,梯度>0,则减去学习率梯度,使之变小,当即某一点斜率向下,梯度<0,则加上学习率梯度,使之变大,最后取得极小值为止。这是一种搜寻极小值的方法。
在这里插入图片描述
3、 为了求得w,b,先计算loss方程对w、b的梯度,即b_gradient,w_gradient,这里预先除了n,后面就不用做平均了。
备注:Python中 “+=”表示两个值相加,然后返回值给符号左侧的变量,在这里因为b_gradient初始值为0,所以可以简单看成“0”。
在这里插入图片描述
在这里插入图片描述
3D机器学习(2):pytorch入门:pytorch优点,梯度下降法初步_第8张图片

4、 然后可采用梯度下降法,计算新的w和b作为迭代计算的结果。其中lr为learning rate 学习率,一般在(0.001-0.01之间),以减少渐进的步长过长而错过极小值。越小当然收敛越慢。(有写错的:m改成w)
3D机器学习(2):pytorch入门:pytorch优点,梯度下降法初步_第9张图片
5、 定义梯度下降运算函数,Num_iterations即迭代次数,可设置 Num_iterations=100,则会循环100次。B和m(或者w)需要给一个初始值,这个自己随便估计一个近似的就OK。Np.array(points)是(x,y)数组,是观测值。最后返回100次循环后的结果[b,m]

4、代码实现:

先计算loss
3D机器学习(2):pytorch入门:pytorch优点,梯度下降法初步_第10张图片
然后计算梯度
3D机器学习(2):pytorch入门:pytorch优点,梯度下降法初步_第11张图片
接着循环迭代计算梯度
在这里插入图片描述
最后是总的函数:
1、 导入points,用nu.genfromtxt导入(x,y)观测值,共100对。
2、 定义一些参数,学习率是0.0001,初始b、m为0,循环次数为1000次
3D机器学习(2):pytorch入门:pytorch优点,梯度下降法初步_第12张图片
输出结果:初始的b、m、error ,1000次迭代后的b、m、error。
在这里插入图片描述

5、main()函数

在你编写的任何python程序中,通常都至少应该使用一个函数:main()。根据约定,main()函数被认为是程序的起点。在一个.py文件中,如果不是在定义函数,也就是说不是在def关键字的内嵌结构内,python会默认其余部分函数是main函数,并自动执行,但正规工程中,一般都会将main函数写为:
if name == main

你可能感兴趣的:(3D机器学习)