Pytorch Tutorial
Chapter 1. Basic operation of tensor
本节介绍有关张量Tensor
的基本操作
Tensor
相当于numpy
中的ndarrays
- 创建空
Tensor
和全零Tensor
,torch.zeros(d0,d1)
类似于numpy.zeros(size)
,torch.empty(d0,d1)
类似于numpy.empty(size)
x1 = torch.empty(2,2)
x2 = np.empty((2,2))
x2 = torch.zeros(2,2)
x4 = np.zeros((2,2))
print(x1)
print(x2)
print(x3)
print(x4)
tensor([[ 1.4013e-45, 0.0000e+00],
[-4.2944e+22, 6.7683e-43]])
tensor([[0., 0.],
[0., 0.]])
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
[[0. 0.]
[0. 0.]]
- 创建随机
Tensor
,torch.rand(d0,d1)
相当于numpy.random.rand(d0,d1)
,rand
表示随机变量服从uniform distribution,torch.randn(d0,d1)
相当于numpy.random.randn(d0,d1)
,randn
表示随机变量服从 normal distribution
y1 = torch.rand(2,2)
y2 = np.random.rand(2,2)
y3 = np.random.random((2,2))
print(y1)
print(y2)
print(y3)
tensor([[0.4407, 0.1455],
[0.0214, 0.6033]])
[[0.91633254 0.74086994]
[0.11203967 0.78700098]]
[[0.89562162 0.63706194]
[0.07474063 0.94183217]]
- 手动创建
Tensor
,torch.tensor()
类似于numpy.array()
z1 = torch.tensor(np.random.rand(2,2))
z2 = np.array([2,2])
print(z1)
print(z2)
tensor([[0.8592, 0.2296],
[0.3234, 0.0014]], dtype=torch.float64)
[2 2]
- 创建全一
Tensor
,torch.ones(d0,d1)
类似于numpy.ones(size)
c1 = torch.ones(2,2)
c2 = np.ones((2,2))
print(c1)
print(c2)
tensor([[1., 1.],
[1., 1.]])
[[1. 1.]
[1. 1.]]
- 创建独热码
Tensor
,torch.eye(d0,d1)
类似于np.eye(d0,d1)
c1 = torch.ones(2,2)
c2 = np.ones((2,2))
print(c1)
print(c2)
tensor([[1., 1.],
[1., 1.]])
[[1. 1.]
[1. 1.]]
- 获得
Tensor
的size
,tensor.size()
返回tensor的shape
r = torch.eye(2,2)
print(r.size())
- 加法,使用
+
与numpy
类似
a1 = torch.eye(2,2)
a2 = torch.rand(2,2)
print(a1+a2)
b1 = np.eye(2,2)
b2 = np.random.rand(2,2)
print(b1+b2)
tensor([[1.1682, 0.4159],
[0.5044, 1.4019]])
[[1.7929664 0.96477472]
[0.3380899 1.35091993]]
- 加法,使用
torch.add()
与numpy.add()
类似
a1 = torch.eye(2,2)
a2 = torch.rand(2,2)
print(torch.add(a1,a2))
b1 = np.eye(2,2)
b2 = np.random.rand(2,2)
print(np.add(b1,b2))
tensor([[1.5244, 0.8070],
[0.2586, 1.1021]])
[[1.52558655 0.85622143]
[0.92030175 1.18823413]]
- 加法,
tensor.add(a,b,out=result)
,将加法的结果保存在预先开辟好的result张量中
result = torch.empty(3,3)
torch.add(a1,a2, out=result)
print(result)
result = torch.add(a1,a2)
print(result)
tensor([[1.8654, 0.8892, 0.9849],
[0.4269, 1.3964, 0.7995],
[0.2235, 0.3375, 1.3471]])
tensor([[1.8654, 0.8892, 0.9849],
[0.4269, 1.3964, 0.7995],
[0.2235, 0.3375, 1.3471]])
- 加法,in-place原地替换的做法
tensor.add_()
,注:所有的in-place的做法都有一个_
a1 = torch.eye(3,3)
a2 = torch.eye(3,3)
a1.add_(a2)
print(a1)
tensor([[2., 0., 0.],
[0., 2., 0.],
[0., 0., 2.]])
- tensor改变形状,
tensor.reshape(size)
与ndarrays.reshape(size)
类似,但tensor.reshape(size)
不是in-place的做法,ndarryas.reshape(size)
也不是in-place的做法
a = torch.eye(4,4)
b = a.reshape(2,8)
print(a)
print(b)
c = np.eye(4,4)
d = c.reshape(2,8)
print(c)
print(d)
tensor([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
tensor([[1., 0., 0., 0., 0., 1., 0., 0.],
[0., 0., 1., 0., 0., 0., 0., 1.]])
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
[[1. 0. 0. 0. 0. 1. 0. 0.]
[0. 0. 1. 0. 0. 0. 0. 1.]]
- 使用
tensor.item()
来获得 scalar tensor的值
a = torch.randn(3,3)
print(a)
print(a[0,0])
print(a[0,0].item())
tensor([[ 0.1261, -0.7185, 0.3167],
[ 0.7252, 0.9447, 1.6690],
[ 0.4250, -0.3057, 0.7201]])
tensor(0.1261)
0.126137375831604