我已经看到了this question的答案,但我还是完全不理解。据我所知,这是最基本的设置:
net = CustomClassInheritingFromModuleWithDefinedInitAndForward()
criterion = nn.SomeLossClass()
optimizer = optim.SomeOptimizer(net.parameters(), ...)
for _, data in enumerate(trainloader, 0):
inputs, labels = data
optimizer.zero_grad()
outputs = net(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
我不明白的是:
优化器使用net.parameters()初始化,我认为这是网络的内部权重。
丢失不访问这些参数,也不访问网络本身。它只能访问网络的输出和输入标签。
Optimizer也不会丢失访问权限。
因此,如果损耗仅对输出有效,而优化器仅对net.parameter有效,如何连接它们?
优化器使用net.parameters()初始化,我认为这是网络的内部权重。
这是因为优化程序将在培训期间修改网络的参数。
丢失不访问这些参数,也不访问网络本身。它只能访问网络的输出和输入标签。
损失只计算出预测和真实之间的误差。
Optimizer也不会丢失访问权限。
它访问在loss.backward
期间计算出的张量>