Deep Learning with Pytorch- A 60 Minute Blitz

Deep Learning with Pytorch: A 60 Minute Blitz

  Blitz :以闪电战空袭

这篇文档的目标

  • 在一个较高的水平理解 Pytorch 的 Tensor 库和神经网络
  • 训练一个分类图像的小规模神经网络分类图像
这篇文章假设你基本熟悉 numpy

什么是Pytorch

Pytorch是基于科学计算包的Python,目标两类人群
  1. 为利用 GPU 的能力取代 NumPy
  2. 提供最大灵活性和速度的深度学习研究平台

开始

Tensors

Tensors类似于Numpy的narrays,只是Tensors可以使用GPU加速计算
from __future__ import print_function
import torch

构建一个 5*3 的未初始化矩阵
x = torch.Tensor(5, 3)

构建一个随机初始化的矩阵
x = torch.rand(5, 3)

获得矩阵的尺寸
print(x.size())
Out: torch.Size([5, 3]) ; 输出的结果

操作

Pytorch对操作有很多句法。在下面的例子我们会看到加法的操作
y = torch.rand(5, 3)
print(x + y)

或者, 加法语法②
torch.add(x, y)

加法: 提供一个输出tensor作为参数
result = torch.Tensor(5, 3)
torch.add(x, y, out=result)
print(result)

就地 ( in-place )加法
y.add_(x)
Note : 任何使一个Tensor就地发生变化的操作都要在后面加上一个’_’

同样可以使用像 NumPy 一样的索引表示
print(x[:, 1])

修改大小 :如果你要resize或者reshape tensor,可以使用torch.view
x = torch.randn(4, 4)
y = x.view(16)
z = x.view(-1, 8); -1的值会从另一维度推出
print(x.size(), y.size(), z.size())
Out: torch.Size([4, 4]), torch.Size([16]), torch.Size([2, 8])

还有 100+ 中操作, 看这里

Numpy Bridge

将一个 Torch Tensor 转换成 NumPy array 或者反过来是一件很轻松的事情

Torch Tensor 和 NumPy array 会共享隐藏的内存地址,因此改变一个两者都将改变

将一个 Torch Tensor 转换成 NumPy array

a = torch.ones(5);
b = a.numpy()

看一下 NumPy array 是怎么样改变数值的
a.add_(1)

将一个 NumPy array 转换成 Torch Tensor

看一下怎样自动将 NumPy array 转换成 Torch Tensor
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)

CUDA Tensors

Tensors 可以使用.cuda方法转移至GPU运算

附录: 还有那100+中操作呢….

Tensors

torch.is_tensor(obj)
  返回 True 如果 obj 是一个 Pytorch tensor
torch.is_storage(obj)
  返回 True 如果 obj 是 pytorch 存储对象
torch.set_default_tensor_type()
torch.numel(input)
  返回输入Tensor中元素总数
torch.set_printoptions(precesion=None, threshold=None, edgeitems=None, linewidth=None, profile=None)

Creation Ops

torch.eye(n, m=None, out=None)
  返回2-D除对角线为1其他全为0的矩阵
torch.from_numpy(ndarray)
  从numpy.ndarray创造一个Tensor
torch.linspace(start, end, steps=100, out=None)
  返回一维Tensor,steps均分从start到end
torch.logspace(start, end, steps=100, out=None)
  返回一维tensor,steps均分从10^start到10^end
torch.ones(*size,out=None)
  返回所有元素都是标量1的tensor, 由size决定shape
torch.ones_like(input, out=None)
  返回和input的size一样的所有元素都是1的tensor
torch.arange(start=0, end, step=1, out=None)
  返回一维tensor,尺寸为(end-start)/step, [start, end), 每两个相邻元素之间差step
torch.range(start, end, step=1, out=None)
  就是比arange多了一个end元素
Warning : 该函数由于arange已被弃用
torch.zeros(*size, out=None)
  返回所有元素都是0的Tensor,由size决定shape
torch.zeros_like(input, out=None)
  参照上面 ones_like

索引, 切片, 联合, 旋转操作

torch.cat(seq, dim=0, out=None)
  cat for concatenate (成串)连结
  将给定的Tensor序列在给定的维度上连结, 除了在cat维, 所有Tensor必须size相同
x = torch.randn(2, 3)
y = torch.Tensoe(2, 3)
torch.cat((x, y), dim=1)

torch.chunk(tensor, chunks, dim=0)
  将一个Tensor分解成给定数目的块

To be continued…

torch.gather(input, dim, index, out=None)
 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值