【Pytorch学习笔记】——了解Pytorch

用了一段时间tensorlfow和pytorch咯 最近越来越觉得pytorch的好用,虽然tf资源强大,但是那个会话开启和关闭,图模型有点厚重,相比之下,pytorch的简洁显得非常的优美!也非常容易上手!所以准备系统的学习一下pytorch

本篇翻译的是这个

http://pytorch.org/tutorials/beginner/blitz/tensor_tutorial.html#sphx-glr-beginner-blitz-tensor-tutorial-py

Pytorch是啥?

是一个深度学习框架,跟caffe,tensorflow类似,也可以说是一个科学计算包(相当于GPU资源的numpy

Tensor是啥?

跟numpy array一样的 就是可以用GPU计算!!多维的数据!

【开始吧!】

简单的导入pytorch:

from __future__ import print_function
import torch

构建矩阵5*3的矩阵:(每个数约是0

x = torch.Tensor(5, 3)
print(x)
输出:(最下面那行告诉你了你tensor的size)

 2.5308e+19  4.5680e-41  2.5308e+19
 4.5680e-41  0.0000e+00  4.9190e+02
 0.0000e+00  1.7146e-05  0.0000e+00
 4.9190e+02  0.0000e+00  0.0000e+00
-0.0000e+00  9.5322e+02  0.0000e+00
[torch.FloatTensor of size 5x3]

要是想随机生成矩阵的话:

x = torch.rand(5, 3)
print(x)

输出:

0.2210  0.4929  0.7898
 0.6966  0.7402  0.7361
 0.7070  0.7861  0.2716
 0.8117  0.1138  0.0971
 0.2315  0.7315  0.9298
[torch.FloatTensor of size 5x3]

想知道tensorsize直接x.size()可以获取tensor的size(比如你要获取变量啥的)

print(x.size())

输出:

torch.Size([5, 3])
输出的是tuple(元组)也就是一个括号里面的东西 所以可以直接用(一般tensor是不能直接获取的 有其他一些东西 后面会说到)

你也可以像numpy那样操作tensor,比如取第二列:

print(x[:, 1])

输出:

 0.4929
 0.7402
 0.7861
 0.1138
 0.7315
[torch.FloatTensor of size 5]

resize你的tensor!可以用:

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())
这个-1也经常在tensorflow里面用!就是自动算出这一维度应该是啥的,在提特征的最后一层经常用

看输出:

torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
还有超多tensor的操作看这里:  transposing, indexing, slicing, mathematical operations, linear algebra, random numbers, etc.

http://pytorch.org/docs/master/torch.html

下次再细说

!常用的来了!Tensor转Numpy

a = torch.ones(5)
print(a)

 1
 1
 1
 1
 1
[torch.FloatTensor of size 5]

b = a.numpy()
print(b)

 [1.  1.  1.  1.  1.]

注意哦!!这里b随a的值变化而变化!

a.add_(1)
print(a)
print(b)
 2
 2
 2
 2
 2
[torch.FloatTensor of size 5]

[ 2.  2.  2.  2.  2.]


Numpy转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]


b也是随着a变化的

!!注意这两个互转一定要是在cpu的情况 不然会报错:

can't convert CUDA tensor to numpy (it doesn't support GPU arrays). Use .cpu() to move the tensor to host memory first

如果你要用cuda加速!

# let us run this cell only if CUDA is available
if torch.cuda.is_available():
    x = x.cuda()
    y = y.cuda()
    x + y

-2.1428 -1.8446 -3.3469 -3.4297
-1.3763 -0.2759 -0.6347  2.5677
 2.3230  3.1854 -2.7559 -3.5846
 3.3744 -2.2248 -0.0433  1.8534
[torch.cuda.FloatTensor of size 4x4 (GPU 0)]


总结一下!

导入pytorch:

import torch

构建随机n*m矩阵:

x = torch.rand(n, m)
获取tensor的size:

x.size()
取任意一列tensor(输出还是tensor)

x[:, 1]
resize tensor:用view

y = x.view(16)#resize成一行
z = x.view(-1, 8)#resize成自动求出的n行8列
tensor转numpy

b = x.numpy()
numpy转tensor:

b = torch.from_numpy(a)
用CUDA加速:
 x = x.cuda()

你可能感兴趣的:(【Pytorch学习笔记】——了解Pytorch)