zoukankan      html  css  js  c++  java
  • pytorch: grad can be implicitly created only for scalar outputs

    运行这段代码
    import torch
    import numpy as np
    import matplotlib.pyplot as plt
    
    x = torch.ones(2,2,requires_grad=True)
    print('x:
    ',x)
    y = torch.eye(2,2,requires_grad=True)
    print("y:
    ",y)
    z = x**2+y**3
    z.backward()
    print(x.grad,'
    ',y.grad)

    结果出现这个错误:RuntimeError: grad can be implicitly created only for scalar outputs

    具体原因是什么呢,让我们看看z输出是什么:

    z: tensor([[2., 1.],
            [1., 2.]], grad_fn=<AddBackward0>)

    我们发现z是个张量,但是根据要求output即z必须是个标量,当然张量也是可以的,就是需要改动一处代码:

    z.backward(torch.ones_like(x))
    我们的返回值不是一个标量,所以需要输入一个大小相同的张量作为参数,这里我们用ones_like函数根据x生成一个张量。
    个人认为,因为要对x和y分别求导数,所以函数z必须是求得的一个值,即标量。然后开始对x,y分别求偏导数。
  • 相关阅读:
    Mybatis在oracle批量更新
    WebService小记
    java基本排序
    ant使用
    python 集合
    amazon-aws 使用 SNS 发送短信
    Html5+ 开发APP 后台运行代码
    CentOS7 -防火墙
    java 模拟表单方式提交上传文件
    修改pom项目版本 jenkins 关联 shell命令
  • 原文地址:https://www.cnblogs.com/peixu/p/13201093.html
Copyright © 2011-2022 走看看