专栏首页AI机器学习与深度学习算法PyTorch入门视频笔记-PyTorch初见

PyTorch入门视频笔记-PyTorch初见

关注"AI机器学习与深度学习算法"公众号

选择"星标"公众号,原创干货,第一时间送达

深度学习框架介绍

2002年 Torch 框架发布,Torch 是一个基于 BSD License 的开源机器学习框架,但是由于 Torch 框架支持的是比较小众的 Lua 开发语言,因此并没有大范围的流行起来。

2016年10月,Facebook 人工智能研究院(FAIR)基于 Torch 推出了测试版本的PyTorch。它是一个基于Python的可续计算包,提供两个高级功能:

  • 具有强大的GPU加速的张量计算(如NumPy);
  • 包含自动求导系统的的深度神经网络;

2018年12月发布了第一个正式版本 PyTorch1.0,「其中在 PyTorch0.3 和 PyTorch0.4 之间有了较大的更新,可能会有部分不兼容的情况」,也就是说如果想要在 PyTorch0.4 以后的版本中运行PyTorch0.3以前的代码需要进行少量的代码修改。

目前比较公认的前两名深度学习框架为 PyTorch 和 TensorFlow1.X(TensorFlow2.X支持动态图),这两个框架最本质的区别是动态图优先还是静态图优先。

  • 动态图能够让程序按照我们编写的代码顺序来执行,这种机制更加容易进行调试,可以将想法思路直接通过代码的展现出来。
  • 静态图能够允许编译器进行更大程序的优化,将创建计算图和运算计算图进行分离,这意味着代码的调试更加困难,无法及时发现代码中的错误。在 TensorFlow1.X 中获取节点结果需要在 Session 会话中运算计算图。「静态图中的计算图一旦定义好,在运算的时候是不允许改变的。」
# 创建计算图
x_ph = tf.placeholder(tf.int32, name = 'x')
y_ph = tf.placeholder(tf.int32, name = 'y')
z_ph = tf.multiply(x_ph, y_ph, name = 'x * y')

# 运算计算图
with tf.Session() as sess:
    z_val = sess.run(z_ph, feed_dict = {x_ph: [8], y_ph: [9]})
    print(z_val)

「对于研究人员推荐使用PyTorch,对于工程师来说推荐TensorFlow2.X。」

PyTorch能干什么?

  • GPU加速
import  torch
import  time
print(torch.__version__)
print(torch.cuda.is_available())
# print('hello, world.')

a = torch.randn(10000, 1000)
b = torch.randn(1000, 2000)

t0 = time.time()
c = torch.matmul(a, b)
t1 = time.time()
print(a.device, t1 - t0, c.norm(2))

device = torch.device('cuda')
a = a.to(device)
b = b.to(device)

# 第一次在cuda上面运行的时候需要完成一些环境的初始化
t0 = time.time()
c = torch.matmul(a, b)
t2 = time.time()
print(a.device, t2 - t0, c.norm(2))

t0 = time.time()
c = torch.matmul(a, b)
t2 = time.time()
print(a.device, t2 - t0, c.norm(2))
  • 自动求导
y = a^2x + bx + c

,有。

import torch
from torch import autograd

x = torch.tensor(1.)
# requires_grad = True为可以进行求导张量
# 求导的张量必须为浮点类型
a = torch.tensor(1., requires_grad = True)
b = torch.tensor(2., requires_grad = True)
c = torch.tensor(3., requires_grad = True)
y = a**2 * x + b * x + c

print('before:', a.grad, b.grad, c.grad) # before: None None None
# 计算y对a, b, c的导数
grads = autograd.grad(y, [a, b, c])
print('after:', grads[0], grads[1], grads[2]) # after: tensor(2.) tensor(1.) tensor(1.)

x = 1.,a = 1.,b = 2.,c = 3.

时,

\frac{\partial y}{\partial a} = 2ax = 2 \times 1. \times 1. = 2., \frac{\partial y}{\partial b} = x = 1.,\frac{\partial y}{\partial c} = 1

视频地址:

  1. 龙良曲深度学习与PyTorch入门实战:https://study.163.com/course/introduction/1208894818.htm

【机器学习】机器学习入门 11-7 RBF核函数

【机器学习】机器学习入门 11-8 RBF核函数中的gamma

【数据分析】Numpy中常用随机函数的总结

【数据分析】Numpy中的两个乱序函数

【机器学习】详解训练集、测试集以及验证集

本文分享自微信公众号 - AI机器学习与深度学习算法(AI-KangChen),作者:Chenkc

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据结构与算法 1-5 代码执行时间测量模块timeit

    本系列是我在学习《基于Python的数据结构》时候的笔记。本小节主要介绍Python内置的代码执行时间测量模块timeit。

    触摸壹缕阳光
  • PyTorch入门笔记-创建序列张量

    在循环计算或者对张量进行索引时,经常需要创建一段连续的整型或浮点型的序列张量。PyTorch 提供了一些能够创建序列张量的方法。

    触摸壹缕阳光
  • PyTorch入门笔记-创建已知分布的张量

    正态分布(Normal Distribution)和均匀分布(Uniform Distribution)是最常见的分布之一,创建采样自这 2 个分布的张量非常有...

    触摸壹缕阳光
  • 1026 程序运行时间 (15 分)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    韩旭051
  • 【DB笔试面试779】在Oracle中,SYS.SMON_SCN_TIME基表的作用是什么?

    SYS.SMON_SCN_TIME基表用于记录过去时间段中SCN与具体的时间戳(timestamp)之间的映射关系,因为是采样记录这种映射关系,所以SMON_S...

    小麦苗DBA宝典
  • pygame-游戏开发学习笔记(八)–pygame.time&&fps 动画制作

    https://github.com/luyishisi/The_python_code/tree/master/python_game/8.fps

    十四君
  • 使用Python和Tesseract来识别图形验证码

    各位在企业中做Web漏洞扫描或者渗透测试的朋友,可能会经常遇到需要对图形验证码进行程序识别的需求。很多时候验证码明明很简单(对于非互联网企业,或者企业内网中的应...

    FB客服
  • 干货 | 到底是什么算法,能让人们如此绝望?

    BOSS最近强迫小编学Tabu Search(TS) 听到这么高大上的词语后 当然是 ...... 一脸懵逼 ? 开始各种Google、度娘 搜索中却无奈发现 ...

    用户1621951
  • 【一天一大 lee】自由之路 (难度:困难) - Day20201111

    视频游戏“辐射4”中,任务“通向自由”要求玩家到达名为“Freedom Trail Ring”的金属表盘,并使用表盘拼写特定关键词才能开门。

    前端小书童
  • 【Python 第49课】 面向对象(3)

    面向对象是比较复杂的概念,初学很难理解。我曾经对人夸张地说,面向对象是颠覆你编程三观的东西,得花上不少时间才能搞清楚。我自己当年初学Java的时候,也是折腾了很...

    Crossin先生

扫码关注云+社区

领取腾讯云代金券