Torch是可以在神经网络中替代numpy。Torch自称为神经网络中的numpy。
Pytorch与Numpy的对比
import torch
import numpy as np
np_data = np.arange(6).reshape((2,3))
torch_data = torch.from_numpy(np_data)
print(
'\nnumpy', np_data,
'\ntorch', torch_data
)
运行结果:
Tensor与Array之间的转换
在tensor数据之后加上numpy。例如:
tensor3array = torch_data.numpy()
矩阵相乘
numpy中使用matmul方法。
torch中使用mm方法。
np.matmul(data, data)
torch.mm(tensor, tensor)
另一种矩阵相乘的方法
将data使用numpy.array转为矩阵的形式,之后使用data的dot方法。
data = np.array(data)
data.dot(data)
Variable
from torch.autograd import Variable
要使用variable需要引入这个包。
variable = Variable(tensor, requires_grad=True)
requires_grad会判断要不要把Variable涉及到反向传播中去。涉及的话会计算Variable中节点的梯度。如果是false就不会计算。
tensor无法反向传播,variable可以反向传播。
backward
误差反向传递。
tensor = torch.FloatTensor([[1,2],[3,4]])
variable = Variable(tensor, requires_grad=True)
t_out = torch.mean(tensor*tensor)
v_out = torch.mean(variable*variable)
print(t_out)
print(v_out)
在计算v_out的时候variable也会受影响,因此会产生一个梯度。
梯度如何计算
- v_out = 1/4sum(varvar)
- d(v_out) / d(var) = 1/42variable = variable/2
查看variable中的数值
variable.grad:梯度
variable.data:variable中的数据(tensor形式)