首页 > 编程知识 正文

pytorch怎么学,torch repeat

时间:2023-05-06 16:31:28 阅读:175225 作者:1718

神经网络的创建和训练包括以下基本步骤:

定义网络结构使用输入数据在网络上正向传播- -计算--forward () loss反向传播计算各权重的梯度(--backward ) ),计算的梯度存在于各参数的tensor内部,使用学习率

原理的反向传播其实是连锁求导规律的另一个名字。 训练时,用给定的输入计算输出,与基准进行比较,计算loss。 然后,用loss对各参数求偏导。 因为使用了梯度下降法,所以在现在的偏导数上乘以学习率来更新参数。 如果是简单的复合函数f(g ) x ),连锁法则很简单。 但是,在神经网络中一般使用多元复合函数求导法则(例如,ResNet中的残差链接为y=xf(x ) )。 对多变量的连锁法则如下,这里设z=f(x,y ),这里设x=g ) t ),y=h ) t )。

考虑一个简单的例子。 如下图所示。

可以认为是残差链接的简化版。 如果想求关于k的I的偏导,就利用连锁法则

可以求出k对I的偏导。 这个结果与用k=(Ih ) I求偏导数相同。 但是,该求法可以将求解某个变量的偏导数限定在一个局部,便于程序的运行。 一个注意点是,在上面的计算图中,I的导数来自两个地方,一个是直接k对I求出的,另一个是k先对j求出,然后对I求出的。 这两个部分是直接相加的关系,这是由多元链式法则引起的,是对不同部分的偏导数相加的关系。

pytorch的实现

pytorch的实现请参考这个视频。 有很好的视频图示。 上面的例子也使用了这个视频的结尾的例子。

如果是正向,除了正向计算外,pytorch还会自动生成一个叫做计算图的东西。 计算图表记录了每个参数和他们计算的op。 而且反向传播时,根据这个计算图进行。 为了实现这个功能,tensor除了原始参数之外,还需要保存其他数据。

data :参数本身。 调用grad:backward ()后计算的梯度。 grad_fn :该数据是经过什么样的运算得到的,在反向传播时使用该运算的推导。 例如在k=i*j,k的tensor中,grad_fn是MulBackward。 is_leaf :是否为叶节点,反向传播在叶节点处停止。 通常,用户直接创建的tensor是叶节点,require_grad=False的节点是叶节点,使用detach ()的数据也是叶节点。 require_grad :此数据是否需要计算坡度。 使用中,波被操作后,最终的输出是标量的变量loss。 只要对loss调用. backward(gradient ),就可以按照计算图求出每个变量的loss的斜率,存在于对应的变量中。 然后,可以使用optimizer.step ()根据在optimizer中定义的learning rate等来更新参数。

backward ()的参数gradient必须说明。 看前面的例子,如果k经过j对I要求偏导的话,就是这样。 在中间步骤j处反向时,计算j对I的偏导数,可知此前的偏导数已经成为一个系数,代入j的值时为固定值。 那么,对于第一个可以有由一个人加入的系数,即backward () )所传递的等级。 如果最终的loss是标量,输入1就可以了。 对于向量,必须传递相同长度的单位1向量。 在pytorch中,如果最后一个loss是向量,pytorch将首先计算L=Torch.sum(Loss*gradient ),然后根据l计算坡度。 这个操作不影响最终的计算结果。

参考:

3359 py torch.org/tutorials/beginner/blitz/autograd _ tutorial.html

3359 Zhan LAN.zhi Hu.com/p/29904755

https://www.youtube.com/watch? v=MswxJw-8PvE

3359 towardsdatascience.com/py torch-autograd-understanding-the-heart-of-pytorchs-magic-2686 CD 94e c95

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。