具体区别看代码
x = torch.arange(4.0, requires_grad = True)
y = 2*torch.dot(x,x)
print('y\n', y) # 说明此时的y是个标量
y.backward() # 不带参数即对标量y求导
x.grad
x = torch.arange(4.0, requires_grad = True)
y = x*x
print('y\n', y) # 说明此时的y是一个向量,所以不能直接对y.backward()不带参数求导
# y.backward() 不带参数这样写则默认y就是一个标量,是对标量进行求导,但是y是一个向量所以报错
y.backward(torch.ones(y.shape)) # 这样写就代表这对向量y进行求导
x.grad==2*x