pytorch_Deep Learning with PyTorch: A 60 Minute Blitz

命令附录:

  1. torch.empty 没有初始化
  2. torch.rand 随机初始化
  3. torch.zeros 0初始化
  4. torch.tensor 使用数据进行初始化
  5. x.newones new*可以指定size
  6. torch.randn_like 使用既有的tensor进行初始化
  7. x+y、torch.add(x, y)、torch.add(x, y, out=result)
  8. y.add(x) 原地加 命令后面带上“”的都是原地操作。
  9. torch.view 可以resize/reshape tensor
  10. 参数为-1,是说该值可以从其他维度推算出来
  11. tensor.item() 得到python的数值
  12. tensor.numpy() 可以得到对应的numpy形式,注意共享内存
  13. torch.from_numpy(a) a是是numpy类型,将numpy转化为tensor
  14. device = torch.device(“cuda”) 返回一个CUDA device object
  15. y = torch.ones_like(x, device=device) 直接创建一个GPU-Tensor
  16. x = x.to(device) cpu-tensor转化为gpu-tensor
  17. z.to(“cpu”, torch.double) to除了可以转换设备,也可以转换类型。

WHAT IS PYTORCH?

  1. pytorch基于python,有两点优势:可以代替numpy使用GPU进行科学计算;是一个深度学习的研究平台,提供了最大的灵活性和速度。

GETTING STARTED

Tensors

  1. torch.Size 是一个tuple。

Operations

  1. 同一个操作可能有多个语法。
  2. Numpy的索引操作都适用于Tensor。

NUMPY BRIDGE

  1. Tensor可以与Numpy array轻易转换,但要注意两者共享内存,双向转换都是共享内存。
  2. 除了char类型的tensor,cpu上的tensor都可以和numpy相互转化。根据这句话,我推断gpu上的tensor不可以。

CUDA TENSORS

  1. 使用to,可以将tensor在设备之间进行转化。

AUTOGRAD: AUTOMATIC DIFFERENTIATION

autograd包提供自动微分。

TENSOR

  1. 只要将tensor的属性.requires_grad设置为true,就可以追踪到在它上面执行的操作。
  2. 完成前向计算后,执行.backward(),就可以自动计算梯度,然后梯度被保存在.grad属性中。
  3. detach()解释1detach()解释2 我理解就是新拷贝了一个tensor,并且该tensor不会影响到老的计算图的梯度计算。如果对它更改了数值,会报错。
  4. torch.no_grad()的范围内,不会对requires_grad=True的tensor进行梯度计算。
  5. Tensor和Function交互,并且组成了一个无环图。如果一个tensor是由function产生的,则它.grad_fn的属性就会指向这个function。用户自定义tensor的.grad_fn是None。
  6. tensor是标量,则调用.backward()不需要参数,否则需要。

GRADIENTS

  1. torch.autograd计算的是Jacobian-vector product。如果一个表达式的结果是向量,则梯度是Jacobian matrix,因此需要提供一个vector相乘,才能得到autograd的计算结果。

NEURAL NETWORKS

  1. nn.Module包含layer,并且提供一个返回output的forward函数。

DEFINE THE NETWORK

  1. init初始化各个layer。forward定义网路结构,将各层联结起来。无需backward。
  2. torch.nn只支持mini-batche,不支持单个训练样本。
  3. 每一个Function节点都连接着一个Function,并编码该Function创建的Tensor的历史。

LOSS FUNCTION

BACKPROP

  1. 别忘了使用zero_grad清除梯度的历史累积量。

UPDATE THE WEIGHTS

  1. 为了使用各种优化器,则使用optimizer.step(),对模型进行更新。
  2. optimizer的初始化用到了net.parameters和learning rate。

TRAINING A CLASSIFIER

WHAT ABOUT DATA?

  1. torchvision.datasets包提供公开数据集,torch.utils.data.DataLoader提供对数据的转换。
  2. 本章教程的源代码比较多,可以参考,是规范的。但是我的学习笔记没有列出,没有必要,代码结构很清晰了。

TRAINING AN IMAGE CLASSIFIER

  1. 加载、转换数据,划分训练集和测试集。
  2. 定义CNN的网络结构。
  3. 定义损失函数。
  4. 使用训练集训练网络。
  5. 使用测试集测试模型。

TRAINING ON GPU

  1. 模型和数据都要使用to,从cpu迁移到gpu上。其中,数据要进行覆盖。

OPTIONAL: DATA PARALLELISM

  1. pytorch默认值使用单个GPU。因此如果使用数据并行,需要对模型进行封装:model = nn.DataParallel(model)。

IMPORTS AND PARAMETERS

DUMMY DATASET

SIMPLE MODEL

CREATE MODEL AND DATAPARALLEL

RUN THE MODEL

RESULTS

SUMMARY

本文标题:pytorch_Deep Learning with PyTorch: A 60 Minute Blitz

文章作者:Alfred

发布时间:2018年12月28日 - 20:12

最后更新:2019年01月05日 - 16:01

原始链接:http://blog.hbsun.top/2018/12/28/pytorch-Deep-Learning-with-PyTorch-A-60-Minute-Blitz/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。