鱼C论坛

 找回密码
 立即注册
查看: 4440|回复: 5

[已解决]optimize object如何与loss function联系

[复制链接]
发表于 2023-4-5 17:58:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
trainer = torch.optim.SGD(net.parameters(), lr=0.03)
l = loss(net(X) ,y)
trainer.zero_grad()
l.backward()
trainer.step()

哪里构建了trainer和loss之间的联系呀?如果没有联系,那trainer如何通过loss来更新参数呢?
最佳答案
2023-4-5 18:56:04
catalpa-bungei 发表于 2023-4-5 18:51
但我还是不能理解,具体哪一步构建了trainer和loss function之间的联系。是因为它们同属这个net,所以自 ...

实际上,trainer 和损失函数之间的联系并非直接显式地在代码中创建。相反,它们之间的联系是通过反向传播过程和网络参数的梯度实现的。

当你计算损失函数(例如 l = loss(net(X), y))时,你会得到一个标量值,该值表示神经网络的预测值与实际值之间的差异。接下来,当你调用 l.backward() 时,PyTorch 会计算损失函数关于网络参数的梯度。这是损失函数和神经网络参数之间联系的关键。这些梯度存储在网络参数的 .grad 属性中。

然后,当你调用 trainer.step() 时,优化器会根据梯度来更新网络参数。优化器知道需要更新哪些参数,因为你在创建优化器时传入了 net.parameters(),这使得优化器能够访问神经网络的所有参数。

因此,虽然代码中并没有显式地连接 trainer 和损失函数,但它们之间的联系是通过反向传播过程中计算的梯度实现的。梯度实际上反映了损失函数对于网络参数的敏感程度,所以通过梯度更新参数,实际上是在使损失函数最小化。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-5 18:04:35 | 显示全部楼层
本帖最后由 catalpa-bungei 于 2023-4-5 18:06 编辑
isdkz 发表于 2023-4-5 18:01
在这个代码示例中,trainer 和 loss 之间的联系是通过 PyTorch 的自动微分和优化器功能实现的。下面是这个 ...


假如我在这个net中有多种loss function, trainer如何选呢?比如
trainer = torch.optim.SGD(net.parameters(), lr=0.03)
l = loss1(net(X) ,y)
l =loss2(net(X),y)
trainer.zero_grad()
l.backward()
trainer.step(
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-5 18:51:49 | 显示全部楼层
isdkz 发表于 2023-4-5 18:18
如果你的神经网络有多个损失函数,你需要将它们组合成一个总损失函数,然后让优化器基于这个总损失函数进 ...

但我还是不能理解,具体哪一步构建了trainer和loss function之间的联系。是因为它们同属这个net,所以自动对应吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-31 04:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表