pytorch:What is PyTorch?
Posted CollectTime
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytorch:What is PyTorch?相关的知识,希望对你有一定的参考价值。
python中数据结构:Tensor(张量)
Tensor和numpy中的ndarray数据类似,不同的是Tensor是为了实现GPU加速而实现的。
x = torch.Tensor(5,3)
print(x)
out:
0.0000e+00 0.0000e+00 -1.4973e+31 4.5722e-41 -1.5089e+31 4.5722e-41
-8.9654e+35 4.5722e-41 -8.9653e+35 4.5722e-41 -1.0677e+36 4.5722e-41
-1.0392e+36 4.5722e-41 -8.9680e+35
[torch.FloatTensor of size 5x3]
建立一个random matrix
x = torch.rand(5, 3)print(x)
out:
0.0979 0.9541 0.5773
0.2289 0.7866 0.9556
0.9883 0.9223 0.3939
0.6566 0.0673 0.8074
0.9839 0.3562 0.9775
[torch.FloatTensor of size 5x3]
查看Tnesor的size:
print(x.size())
torch.Size([5, 3])
torch.size()实际是一个tuple,tuple的方法可以用在这上面,比如:
torch.size()[0] = 5
操作:
1:x,y是两个尺寸相同的Teosor,相加方式有:
c = x + y
torch.add(x,y)
或者:b = torch.Tensor(x.size())
torch.add(x,y,out = b)
2:原地修改数据
y.add_(x)
类似于:y = y+x
同时,所有的原地修改数据的操作一般都在后面加上后缀_,比如x.copy_(y),x.t_()等都修改了x值。
3:Tensor支持numpy中的索引功能
print(x[:,1])
0.9541
0.7866
0.9223
0.0673
0.3562
[torch.FloatTensor of size 5]
4:修改尺寸
x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8)
# the size -1 is inferred from other dimensions
print(x.size(), y.size(), z.size())
out:
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
5:100多种有关Tensor的操作,包括转置,索引,切片,数学操作,线性代数,随机数等,查看链接:
http://pytorch.org/docs/master/torch.html
Numpy Bridge
1.Tensor to numpy array
a = torch.ones(5)
print(a)
out:
1 1 1 1 1[torch.FloatTensor of size 5]
b = a.numpy()
>>> b
array([ 1., 1., 1., 1., 1.], dtype=float32)
a.add_(1)
print(a)
print(b)
>>> a.add_(1)
a:
2
2
2
2
2
[torch.FloatTensor of size 5]
>>> b
array([ 2., 2., 2., 2., 2.], dtype=float32)
在这里,b = a.numpy,修改a之后,b会变化,但是修改b,a不会变化
>>> b = b+1
>>> b
array([ 3., 3., 3., 3., 3.], dtype=float32)
>>> a
2
2
2
2
2
[torch.FloatTensor of size 5]
2.Numpy array to Tensor
import numpy as np
a = np.ones(5)b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
[ 2. 2. 2. 2. 2.] 2 2 2 2 2[torch.DoubleTensor of size 5]
意思就是,哪一个是谁的父辈,父辈改变,子辈就改变,子辈改变,父辈不变。
如何在pytorch中使用GPU:(集群)
1:进入节点 ssh g0605
2:进入环境:source activate tfenv27
3:查看GPU:nvidia-smi
4:选择GPU: CUDA_VISIBLE_DEVICES=1
5:进入python,import torch,
6:检测是否可用cuda:torch.cuda.is_available()
7:返回ture即可。同时在python中也可以修改CUDA_VISIBLE_DEVICES=1
实例:
>>> x = torch.rand(5,3)
>>> y = torch.rand(5,3)
>>> x
0.2216 0.3379 0.6046
0.4487 0.1771 0.2147
0.3842 0.9087 0.8120
0.0490 0.7780 0.4601
0.4974 0.3892 0.2615
[torch.FloatTensor of size 5x3]
>>> y
0.5192 0.5855 0.3550
0.0694 0.0407 0.8765
0.0643 0.5250 0.5405
0.7573 0.6613 0.1981
0.9853 0.7265 0.2418
[torch.FloatTensor of size 5x3]
>>> if torch.cuda.is_available():
... x = x.cuda()
... y = y.cuda()
... x+y
...
0.7407 0.9234 0.9596
0.5182 0.2178 1.0911
0.4485 1.4337 1.3525
0.8064 1.4394 0.6582
1.4827 1.1157 0.5032
[torch.cuda.FloatTensor of size 5x3 (GPU 0)]
>>> x = x.cuda()
>>> type(x)
<class 'torch.cuda.FloatTensor'>
数据结构改变了,此时'torch.cuda.FloatTensor和'torch.FloatTensor不能相加。
以上是关于pytorch:What is PyTorch?的主要内容,如果未能解决你的问题,请参考以下文章