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?的主要内容,如果未能解决你的问题,请参考以下文章

一探torch.nn究竟“What is torch.nn really?”

承接TensorFlow深度学习代做pytorch图像处理

Pytorch——张量 Tensors

Pytorch is_leaf

Pytorch is_leaf

Pytorch is_leaf