文章目录

  • DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ
  • 什么是pytorch
    • 开始
      • 张量Tensor
      • 操作Operations
    • NumPy Bridge
      • Tensor 转化为Array
      • Array 转化为Tensor
    • CUDA Tensors

DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ

最近因为课题的需要,要利用pytorch实现pointer network,所以在这里对ytorch的基本语法做一个简答的教程,主要参考了《60分钟闪电战:使用pytorch进行深度学习》。

本教程的目标如下:

  • 理解pytorch的张量(Tensor)库和顶层神经网络;
  • 训练一个简单神经网络进行图像分类。
  1. 深度学习pytorch基础入门教程(1小时)-张量、操作、转换
  2. 深度学习pytorch基础入门教程(1小时)-自动梯度
  3. 深度学习pytorch基础入门教程(1小时)-神经网络

什么是pytorch

它是一个基于python的科学计算包,针对两类受众:

  • 可以代替Numpy从而利用GPU的强大功能;
  • 是一个可以提供最大灵活性和速度的深度学习研究平台。

开始

张量Tensor

张量类似于Numpy中的ndarrays,此外张量可以在GPU上使用以加速计算。

from __future__ import print_function
import torch

注意:声明的未初始化的矩阵,在使用之前将不包含明确的已知值。当创建一个未初始化的矩阵时,当时在分配内存中的任何值都将作为初始值出现。

构建一个5x3的未初始化矩阵:

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

输出:

tensor([[1.4013e-43, 4.4842e-44, 1.5975e-43],[1.6395e-43, 1.5414e-43, 1.6115e-43],[4.4842e-44, 1.4433e-43, 1.5975e-43],[1.4153e-43, 1.3593e-43, 1.6255e-43],[4.4842e-44, 1.5554e-43, 1.5414e-43]])

构建随机初始化的矩阵:

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

输出:

tensor([[0.5609, 0.0796, 0.9257],[0.5687, 0.6893, 0.2980],[0.7573, 0.1314, 0.8814],[0.8589, 0.7945, 0.0682],[0.5252, 0.0355, 0.1465]])

构建全零且类型为long的矩阵:

x = torch.zeros(5, 3, dtype=torch.long)
print(x)

输出:

tensor([[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0]])

直接根据数据创建张量:

x = torch.tensor([5.5, 3])
print(x)

输出:

tensor([5.5000, 3.0000])

或者基于现有的张量创建一个新的张量。如果用户没有提供新的值,则这两种创建方法将重用输入张量的属性,如数据类型。

x = x.new_ones(5, 3, dtype=torch.double)      # new_* methods take in sizes
print(x)x = torch.randn_like(x, dtype=torch.float)    # override dtype!
print(x)                                      # result has the same size

输出:

tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]], dtype=torch.float64)
tensor([[ 0.9228,  0.4648,  0.9809],[ 0.3880,  1.1388, -0.3020],[ 1.5349, -0.5819,  0.0219],[ 0.5549,  1.1202, -0.1401],[ 1.5410,  0.0499, -0.0484]])

获取张量大小:

print(x.size())

输出:

torch.Size([5, 3])

torch.Size实际上是一个元组,所以它支持所有的元组操作。

操作Operations

操作支持多种语法。在下面的示例中,将先查看加法操作。

  • 加法:语法1
y = torch.rand(5, 3)
print(x + y)

输出:

tensor([[ 0.4719,  0.3090, -0.3895],[-1.2460, -0.6719,  2.4085],[-1.0253,  1.7267,  1.8661],[ 1.0923,  1.1947, -0.3916],[ 1.2984,  0.7781,  2.1696]])
  • 加法:语法2
print(torch.add(x, y))

输出:

tensor([[ 0.4719,  0.3090, -0.3895],[-1.2460, -0.6719,  2.4085],[-1.0253,  1.7267,  1.8661],[ 1.0923,  1.1947, -0.3916],[ 1.2984,  0.7781,  2.1696]])
  • 加法:提供一个输出张量作为参数
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)

输出:

tensor([[ 0.4719,  0.3090, -0.3895],[-1.2460, -0.6719,  2.4085],[-1.0253,  1.7267,  1.8661],[ 1.0923,  1.1947, -0.3916],[ 1.2984,  0.7781,  2.1696]])
  • 加法:在位in-place(直接更新原有的张量)
# adds x to y
y.add_(x)
print(y)

输出:

tensor([[ 0.4719,  0.3090, -0.3895],[-1.2460, -0.6719,  2.4085],[-1.0253,  1.7267,  1.8661],[ 1.0923,  1.1947, -0.3916],[ 1.2984,  0.7781,  2.1696]])

通过在位改变张量的任意操作都是以后缀"_"结尾的,如x.copy_(y), x.t_()都会改变x。

  • 可以使用标准的类似于Numpy的索引实现所有功能!
print(x[:, 1])

输出:

tensor([0.4648,  1.1388,  -0.5819, 1.1202,  0.0499])
  • 改变大小:如果想改变张量的大小或性状,可以通过torch.view实现:
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())

输出:

torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
  • 如果张量中只有一个元素,可以通过.item()获取值作为Python数字
x = torch.randn(1)
print(x)
print(x.item())

输出:

tensor([0.2687])
0.26873132586479187

更多张量操作,包括转置(transposing)、索引(indexing)、切片(slicing)、数学操作(mathematical operations)、线性代数(liner algebra)、随机数(random numbers)等,可以点击这里。

NumPy Bridge

NumPy Bridge的作用是实现Torch张量与Numpy array之间的相互转化。

torch的Tensor和numpy的array分享底层的内存地址(如果Torch 张量位于CPU上),所以改变其中一个就会改变另一个。

Tensor 转化为Array

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

输出:

tensor([1., 1., 1., 1., 1.])

通过.numpy()直接得到array。

b = a.numpy()
print(b)

输出:

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

查看numpy数组的值是如何变化的。

a.add_(1)
print(a)
print(b)

输出:

tensor([2., 2., 2., 2., 2.])
[2. 2. 2. 2. 2.]

可以看出a和b都发生了变化。

Array 转化为Tensor

看看如何改变np数组自动改变Torch张量的。

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.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)

通过from_numpt()可以将array转化为tensor,同时改变数组的值对应的张量也会自动改变。

CUDA Tensors

可以通过.to方法将张量移动到其他设备上。

# let us run this cell only if CUDA is available
# We will use ``torch.device`` objects to move tensors in and out of GPU
if torch.cuda.is_available():device = torch.device("cuda")          # a CUDA device objecty = torch.ones_like(x, device=device)  # directly create a tensor on GPUx = x.to(device)                       # or just use strings ``.to("cuda")``z = x + yprint(z)print(z.to("cpu", torch.double))       # ``.to`` can also change dtype together!

输出:

tensor([0.8383], device='cuda:0')
tensor([0.8383], dtype=torch.float64)

深度学习pytorch基础入门教程(1小时)-张量、操作、转换相关推荐

  1. 飞桨深度学习零基础入门(一)——使用飞桨(Paddle)单层神经网络预测波士顿房价

    系列文章往期回顾 飞桨深度学习零基础入门(序)--Python实现梯度下降 使用飞桨(Paddle)构建单层神经网络 系列文章往期回顾 一.导入相关依赖包 二.构建单层神经网络回归类 三.设置参数 四 ...

  2. 深度学习保姆级入门教程 -- 论文+代码+常用工具

    导读 该篇文章可以看作是我研一如何入门深度学习的一个大总结,本人本科专业为软件工程,硕士期间研究方向为基于深度学习的图像分割,跨度相对而言不算太大.如果你对如何入门深度学习还很迷茫的话,那么请看下去吧 ...

  3. python教程5小时完整版_Python零基础入门教程5小时完整版(北京理工大2020年版)

    这是面向零基础人群的Python教程,通过5个小时的学习,你能够了解Python的基础语法,并且编写100行左右的代码来解决日常生活中遇到的问题. 每个章节学练结合.先讲解Python的基础知识,然后 ...

  4. 动手学习深度学习——Pytorch版教程系列汇总(长期更新版)

    动手学习深度学习目录 开发环境配置 1. 基本简介 2. 预备知识 3. 线性神经网络 4. 多层感知器 5. 深度学习计算 6. 卷积神经网络 7. 现代卷积神经网络 8. 循环神经网络 9. 现代 ...

  5. 最新Android基础入门教程目录(完结版)

    第一章:环境搭建与开发相关(已完结 10/10) https://blog.csdn.net/coder_pig/article/details/50000773 Android基础入门教程--1.1 ...

  6. procreate绘画零基础入门教程

    今天我们来学习procreate基础入门教程之如何画侧脸线稿,很多人在线稿阶段就不会画侧脸啦,不用担心,今天来教大家procreate画侧脸线稿的方法! procreate绘制脸部画法: 第一:重侧脸 ...

  7. 2015年最新Android基础入门教程目录(完结版)

    2015年最新Android基础入门教程目录(完结版) 标签(空格分隔): Android基础入门教程 前言: 关于<2015年最新Android基础入门教程目录>终于在今天落下了帷幕,全 ...

  8. java adt入门教程_Android基础入门教程目录

    第一章:环境搭建与开发相关(已完结 10/10) https://blog.csdn.net/coder_pig/article/details/50000773 Android基础入门教程--1.1 ...

  9. python实现登录支付宝收能量_适合零基础人群学习的Python入门教程

    适合零基础人群学习的Python入门教程学什么?小编为大家准备的Python学习教程,课程主要讲解:Python核心编程.Linux基础.前端开发.Web开发.爬虫开发.人工智能等内容. 对于初学者想 ...

  10. 适合零基础人群学习的Python入门教程

    适合零基础人群学习的Python入门教程学什么?小编为大家准备的Python学习教程,课程主要讲解:Python核心编程.Linux基础.前端开发.Web开发.爬虫开发.大数据.人工智能等内容. Py ...

最新文章

  1. 王璋等揭示慢性阻塞性肺疾病炎症内型与呼吸道微生物组的关系(IF 21)
  2. Stormpath发布了简化移动和前端身份验证的客户端API
  3. Exchange2010 初始化失败
  4. 异步加载js文件的方法总结
  5. Python字典和集合
  6. 【译】CodeIgniter HMVC模块扩展使用文档
  7. 数据结构与算法实战-C++实现
  8. 作者:赵江华(1989-),女,中国科学院计算机网络信息中心研究实习员
  9. 关闭word 2010时每次都提示:所做更改会影响共用模板Normal.dotm
  10. 通信upf是什么意思_中兴通讯全场景UPF 极简设计,随需而动
  11. 诗经名句(供大家看代码疲劳的时候消遣下)
  12. 聚宽量化投资策略研究
  13. 数模论文格式小技巧(符号说明三线表)
  14. 2019六月广东省计算机二级报名,广东2019年3月全国计算机二级考试报名时间通知...
  15. 7个高清图片素材网,免费/可商用
  16. 黑群晖折腾记(二)-为不支持通信的UPS 增加断电自动关 NAS
  17. 安装官方 Synaptics 驱动,终于解决 HP Pavilion G4 笔记本 讨厌的触摸板锁定问题!
  18. 吉他谱Guitar pro是什么软件及功能作用介绍
  19. 深度学习(10)ablation experiments
  20. UnicodeEncodeError: 'ascii' codec can't encode character u'\u548c' in position 0: ordinal not in ran

热门文章

  1. .Net Core报“‘GB2312‘ is not a supported encoding name. For information on defining a custom encod”的错误
  2. 针对EasyUI的checkbox进行扩展
  3. MySQL 结果集问题(获取不存在表的信息导致的隐藏bug)
  4. string进行大小写转换
  5. dhcp服务配置 [Linux] 超详细的步骤!学不会你打我!
  6. mysql删除树_B-树的删除过程介绍
  7. 学python将来做什么工作_学Python编程能做什么工作?从事什么岗位?——这些问题你知道吗?...
  8. ElementUI:input表单验证
  9. 面向对象(Python):学习笔记之类属性和类方法
  10. linux 执行安装脚本,批量执行Linux安装程序和脚本