pytoch总结autograd自动求导02

1,pytorch中的自动求导机制—autograd模块
(1)神经网络求导的核心包是autograd,使用时导入import torch.autograd
(2)定义tensor时格式如下 torch.tensor(data,dtype=None,device=None,requires_grad=None)
其中requires_grad标志是否追踪作用在该tensor的所有操作,如果为true,则在完成计算后,通过调用.backward()
来自动计算所有的梯度,所有梯度会被自动 累积 到.grad属性上
(3)有时候不想跟踪tensor的梯度,可以使用 .detach()方法
或者可以将多有代码包括在 with.torch.no_grad():中,----在评估模型时特别有用
(4)查看属性: tensor.requires_grad
修改属性: tensor.requires_grad_(True/False)
获取求得的导数: tensor.grad
反向传播自动求导 .backward
求导的限制: 标量对标量
标量对矩阵
(5)对于tensor.backward(),
如果tensor是一个标量,则不用为.backward()指定参数,tensor.backward() 等价于 tensor.backward(torch.tensor(1))
如果tensor有更多的元素,则需要为.backward()指定gradients参数,gradients参数是一个和tensor同维度的张量,可用来代表
各个标量在求导时候的权重

2,torch搭建神经网络的步骤
(1)定义神经网络的结构
(2)通过神经网络计算输入
(3)计算损失函数
(4)将梯度反向传播回网络的参数
(5)更新网络的参数, weight = weight - learning_rate*gradient

3,(1)torch中搭建的神经网络都是使用类来实现的,所有自己搭建的神经网络的类都必须继承torch.nn.Module这个基类
nn.Module中包含了各个层,在自己的类中需要定义各种超参数,比如网络的层数,网络的尺寸,在实际中,必须
在自己的类的构造函数中调用nn.Module的构造函数,一般有两种方式:
super(子类名,self).init()
nn.Module.init(self)
自己定义的网络类,一般需要在构造函数中定义 可以学习的参数, 在forward中使用非学习参数

猜你喜欢

转载自blog.csdn.net/weixin_44493916/article/details/90024083