用了一段时间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]
想知道tensor的size,直接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.]
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]
!!注意这两个互转一定要是在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()
b = torch.from_numpy(a)
x = x.cuda()