当前位置: 首页 > 知识库问答 >
问题:

python - pytorch语法问题 loss.backword() 缺少入参?

蒋昊天
2023-11-21

我是一个母语java的后端开发,最近在学python和pytorh,对脚本语言不太熟悉。
我从教程中看到一个简单模型的训练过程的部分代码如下

    for epoch in range(opt.epochs):        loss_mean = 0.        correct = 0.        total = 0.        net.train()        for i, data in enumerate(train_loader):            # forward            inputs, labels = data            outputs = net(inputs)            # backward            optimizer.zero_grad()            loss = criterion(outputs, labels)            loss.backward()            # update weights            optimizer.step()

我的疑惑如下:
loss是net(模型)的输出经过损失函数计算得到的损失对象,optimizer是优化器。loss.backword()是反向传播,更新模型中参数的梯度。有了梯度之后,优化器根据梯度对模型参数进行更新。这些过程我大概是没有理解错的。
但是这个过程有些函数我感觉缺少入参。比如,loss.backward()应该是对net.parameter更新梯度属性,那应该是loss.backward(net.parameter); 以及optimizer.step()也是对net.parmeter更新,应该是optimizer.step(net.parameter)。
如果不传入参,那么一定是之前的某些过程中获得了net.parameter的引用,不然不可能更新到它。optimizer在声明的时候是这样写的

optimizer = optim.SGD(net.parameters(), lr=opt.lr, momentum=0.9)  # 选择优化器

这里可以看到在声明时传递了parameters的引用,我还能理解。但是loss是什么时候获得parameters的引用的呢?以及loss是不是真的持有net.parameters的引用呢?

共有1个答案

慕容昊焜
2023-11-21

在 forward 的每一步里,比如加法、乘法、Relu、等等,如何做 backward 就已经记录到了结果的 tensor 里。所以可以在最终结果 tensor 里直接调用 backward 。

 类似资料:
  • 我正在使用Webpack添加对ES6、react和其他一些东西的支持。 现在我得到了错误: 拒绝应用中的样式,因为其MIME类型('text/html')不是受支持的样式表MIME类型,并且启用了严格的MIME检查。 所以我检查了Google Chrome Developer Tools中的sources选项卡,发现甚至不存在。我做错了什么? 以下是我的webpack配置:

  • 问题内容: C#具有用于声明和使用属性的语法。例如,可以声明一个简单的属性,如下所示: 也可以在属性中添加一些逻辑,如下所示: 无论是否具有逻辑,属性的使用方式与字段相同: 我对Java或C#都不陌生-我已经使用了很多东西,而且我总是想念Java中使用属性语法。我在这个问题中读到“在Java7中或将来几乎不可能添加属性支持”,但是坦率地说,我发现在讨论,论坛,博客,评论和JSR中需要挖掘太多的工作

  • 在哪里可以找到repo以下载下面列出的缺失依赖项。我尝试了以下存储库,但找不到这些依赖项。 我的存储库是:

  • 我正在开发一款游戏,遇到了一些无法解决的问题(至少是我自己)。 我的代码有以下问题: > 当询问是否要保存屏幕截图时,尽管有

  • 我有一个小的Maven应用程序,它使用JaCoCo进行测试覆盖报告。我不断得到以下错误: 由于缺少执行数据文件,正在跳过JaCoCo执行 这是我的POM。xml文件。我自己删除了项目元素。 这是我的主类,它位于结构下: 这是带有单元测试的类,它位于结构下: 我该如何解决这个问题?

  • 本文向大家介绍Python运行提示缺少模块问题解决方案,包括了Python运行提示缺少模块问题解决方案的使用技巧和注意事项,需要的朋友参考一下 背景: 在pycharm中运行正常,但是使用命令方式就提示没有模块 解决方案 在Python安装目录下的\Lib\site-packages文件夹中建立一个.pth文件,内容为自己写的 查看包是否有导入 再次运行,就成功了 以上就是本文的全部内容,希望对大