请教一下pytorch的这段代码里:torch.autograd.grad(y,x,create_graph=True)[0],这里
import numpy as np
import torch
# f(x) = a*x**2 + b*x + c的导数
x = torch.tensor(0.0,requires_grad = True) # x需要被求导
a = torch.tensor(1.0)
b = torch.tensor(-2.0)
c = torch.tensor(1.0)
y = a*torch.pow(x,2) + b*x + c
# create_graph 设置为 True 将允许创建更高阶的导数
dy_dx = torch.autograd.grad(y,x,create_graph=True)[0]
print(dy_dx.data)
# 求二阶导数
dy2_dx2 = torch.autograd.grad(dy_dx,x)[0]
print(dy2_dx2.data)
请问 torch.autograd.grad(y,x,create_graph=True)[0],这里为什么有[0] ? 既然可以[0],那么 torch.autograd.grad(y,x,create_graph=True)[1]又表示什么呢?
的确,都说torch.autograd.grad返回的是第一参数对第二个参数的导数,一般是网络中的梯度,为什么都只取[0],我也要去看下笔记查下。这一维度的具体意义
[0]表示取出torch.autograd.grad(y,x,create_graph=True)返回的第一个元素,即一阶导数dy_dx。
说明前面的值是一个数组或者叫列表,数组才能这样取数据/[0]表示数组中第一个元素,以此类推
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!