pytorch提供了许多迭代器,可以方便地调用
$ from torch import optim
$ optimizer=optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
这里需要注意优化器的输入参数,其中第一个形参需要传入一个可迭代或者说可遍历的对象,类似于Dataloader的返回值的类型,但这里用到的是需要优化的参数,也就是模型参数。
named_parameters()返回的迭代器中,每个元组打包了2个内容,分别是layer-name和layer-param(网络层的名字和参数)
parameters()返回的迭代器只有后者layer-param(网络层参数)
只有model.parameters()中包含的参数被更新,不更新的参数为model.buffer()中的参数。BatchNormalization层中的参数是默认保存在model.buffers()中的。model.buffers()中的参数可以设置required_grad为True来计算梯度,但是不能用optimizer进行更新。
$ self.tensor=torch.randn(size=(1, 1, 5, 5))
$ self.register_buffer('my_buffer', self.tensor)
当变量保存在model.buffers()中后,也可以在model.statedict()中查看到buffer中的参数。