- 关于求梯度,只有我们定义的Variable才会被求梯度,由
creator
创造的不会去求梯度 - 自己定义Variable的时候,记得Variable(Tensor, requires_grad = True),这样才会被求梯度,不然的话,是不会求梯度的
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
a = np.ones(5)
b = torch.from_numpy(a)
a_ = b.numpy()
np.add(a, 1, out=a)
if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
x + y
torch.Tensor(1,2,3)
torch.Tensor([1,2,3])
# tensor 与 numpy
import torch
from torch.autograd import Variable
import numpy as np
n1 = np.array([1., 2.]).astype(np.float32)
# t1 = torch.FloatTensor(n1)
t1 = torch.from_numpy(n1)
n1[0] = 2.
print(t1)
# 可以看出,当使用 无论是使用 FloatTensor 还是 from_numpy 来创建 tensor
# tensor 只是指向了 初始的值而已,而没有自己再开辟空间。
# FloatTensor(2,3,2) 这个不一样,它是开辟了一个 空间。
神经网络的输入也是Variable类型的,但是并不需要对其求导。
requires_grad控制着是否在反向传播过程中对该节点求梯度:
input = Variable(torch.randn(N, D_in).type(torch.TensorFloat), requires_grad=False)
参考链接:http://blog.csdn.net/u012436149/article/details/54627597
pytorch如何将Variable或Tensor转换为numpy?