Pytorch快速入门及在线体验
本文搭配了Pytorch在线环境,可以直接在线体验。
Pytorch是Facebook 的 AI 研究团队发布了一个基于 Python的科学计算包,旨在服务两类场合: 1.替代numpy发挥GPU潜能 ;2. 一个提供了高度灵活性和效率的深度学习实验性平台。
在线体验练习地址:Pytorch快速上手/在线实验室
1.Pytorch简介
Pytorch是Facebook 的 AI 研究团队发布了一个基于 Python的科学计算包,旨在服务两类场合:
- 替代numpy发挥GPU潜能(在线环境暂时不支持GPU)
- 一个提供了高度灵活性和效率的深度学习实验性平台
2.Pytorch特点及优势
2.1 Pytorch特点
- PyTorch 提供了运行在 GPU/CPU 之上、基础的张量操作库;
- 可以内置的神经网络库;
- 提供模型训练功能;
- 支持共享内存的多进程并发(multiprocessing )库等;
2.2 Pytorch特点
处于机器学习第一大语言 Python 的生态圈之中,使得开发者能使用广大的 Python 库和软件;如 NumPy、SciPy 和 Cython(为了速度把 Python 编译成 C 语言);
(最大优势)改进现有的神经网络,提供了更快速的方法——不需要从头重新构建整个网络,这是由于 PyTorch 采用了动态计算图(dynamic computational graph)结构,而不是大多数开源框架(TensorFlow、Caffe、CNTK、Theano 等)采用的静态计算图;
提供工具包,如torch 、torch.nn、torch.optim等;
3.Pytorch常用工具包
- torch :类似 NumPy 的张量库,强 GPU 支持 ;
- torch.autograd :基于 tape 的自动区别库,支持 torch 之中的所有可区分张量运行;
- torch.nn :为最大化灵活性未涉及、与 autograd 深度整合的神经网络库;
- torch.optim:与 torch.nn 一起使用的优化包,包含 SGD、RMSProp、LBFGS、Adam 等标准优化方式;
- torch.multiprocessing: python 多进程并发,进程之间 torch Tensors 的内存共享;
- torch.utils:数据载入器。具有训练器和其他便利功能;
- torch.legacy(.nn/.optim) :处于向后兼容性考虑,从 Torch 移植来的 legacy 代码;
4.tensor的创建
- 导入pytorch的包
import torch
- jupyter notebook
import torch
#创建一个5*3的随机矩阵并显示它(Shift+Enter)
x=torch.rand(5,3)
x
5.tensor的运算
y=torch.ones(5,3)
#创建一个5*3的全是1矩阵并显示它
y
#计算两个矩阵相加(注意尺寸要一模一样)
z=x+y
z
#矩阵乘法,矩阵转置
q=x.mm(y.t())
所有Numpy上面关于ndarray的运算全部可以应用于tensor
有关tensor的运算参考 http://pytorch.org/docs/master/tensors.html
- 从numpy到tensor的转换:
torch.from_numpy(a)
- 从tensor到numpy的转换:
a.numpy()
- tensor与numpy的最大不同:tensor可以在GPU上运算
- 转到gpu上运算(x.cpu()转成cpu)
if torch.cuda.is_available():
x=x.cuda()
y=y.cuda()
print(x+y)
6.Numpy桥
将Torch的Tensor和numpy的array相互转换。注意Torch的Tensor和numpy的array会共享他们的存储空间,修改一个会导致另外的一个也被修改。
# 此处演示tensor和numpy数据结构的相互转换
a = torch.ones(5)
b = a.numpy()
# 此处演示当修改numpy数组之后,与之相关联的tensor也会相应的被修改
a.add_(1)
print(a)
print(b)
# 将numpy的Array转换为torch的Tensor
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
# 另外除了CharTensor之外,所有的tensor都可以在CPU运算和GPU预算之间相互转换
# 使用CUDA函数来将Tensor移动到GPU上
# 当CUDA可用时会进行GPU的运算
if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
x + y
7.动态计算图(Dynamic Computation Graph)
- 是pytorch的最主要特征
- 让计算模型更灵活,复杂
- 让反向传播算法随时进行
7.1自动微分变量
gradient梯度,传播的就是梯度
定义一个自动微分变量
from torch.autograd import Variable
#Variable:自动微分变量
x=Variable(torch.ones(2,2),requires_grad=True)
#把一个2*2的张量转变成微分的变量(添加节点,构造计算图)
x
y=x+2
y.creator
#y的父节点
z=torch.mean(y*y)
z.data
与tensor不同之处:记录下所有的计算路径,在内存中构造计算图
7.2多层运算
z=m((x+2)*(x+2))
一个多层神经网络
计算梯度:求导
z.backward()
#z对x的偏导
#只有叶节点可以算grad。只有x有grad信息,因为它没有父节点
print(z.grad)
print(y.grad)
print(x.grad)
7.3更疯狂的函数依赖
s=Variable(torch.FloatTensor([[0.01,0.02]]),requires_grad=True)
x=Variable(torch.ones(2,2),requires_grad=True)
for i in range(10):
s=s.mm(x)
#赋值的操作会多一个新节点出来
z=torch.mean(s)
#backward()求导计算
z.backward()
print(x.grad)
print(s.grad)
8.神经网络
用 torch.nn 包可以进行神经网络的构建,点击实验楼开源软件库的教程:Pytorch快速上手/在线实验室即可马上查看并在线体验了;
Pytorch快速入门及在线体验的更多相关文章
- 【笔记】PyTorch快速入门:基础部分合集
PyTorch快速入门 Tensors Tensors贯穿PyTorch始终 和多维数组很相似,一个特点是可以硬件加速 Tensors的初始化 有很多方式 直接给值 data = [[1,2],[3, ...
- PyTorch快速入门教程七(RNN做自然语言处理)
以下内容均来自: https://ptorch.com/news/11.html word embedding也叫做word2vec简单来说就是语料中每一个单词对应的其相应的词向量,目前训练词向量的方 ...
- 《深度学习框架PyTorch:入门与实践》读书笔记
https://github.com/chenyuntc/pytorch-book Chapter2 :PyTorch快速入门 + Chapter3: Tensor和Autograd + Chapte ...
- gulp快速入门&初体验
前言 一句话先 gulp 是一个可以简单和自动化"管理"前端文件的构建工具 先说我以前的主要工作,我主要是做游戏服务端的,用c++/python,所以我对东西的概念理解难免要套到自 ...
- MongoDB快速入门指南与docker-compose快体验
MongoDB快速入门指南与docker-compose快体验 MongoDB相对于RDBMS的优势 模式少 -MongoDB是一个文档数据库,其中一个集合包含不同的文档.一个文档之间的字段数,内容和 ...
- 专为设计师而写的GitHub快速入门教程
专为设计师而写的GitHub快速入门教程 来源: 伯乐在线 作者:Kevin Li 原文出处: Kevin Li 在互联网行业工作的想必都多多少少听说过GitHub的大名,除了是最大的开源项目 ...
- CI Weekly #21 | iOS 持续集成快速入门指南
搭建 iOS 持续集成环境要多久?每个 iOSer 都有不同的答案.这次我们整理了 flow.ci 的 iOS 持续集成的相关文档和最佳实践,希望帮你更快地完成构建.更新文档见: flow.ci iO ...
- JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署
接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...
- UI设计初学者必看,这款设计神器教你快速入门
网络时代,网页和手机App已经深入到人们生活的方方面面.这也使得App界面设计越来越受青年求职者们的青睐,并纷纷投入这个行业.但是,作为UI设计初学者,究竟如何才能快速的入门?当今市场上,是否有那么一 ...
随机推荐
- MyEclipse启动Tomcat缓慢的原因及解决办法
不知道朋友们是否有一种烦恼:有时候使用MyEclipse启动Tomcat十分缓慢,可能在几分钟前20秒以内,但现在却需要200秒开外:其间内存和CPU都被占用地厉害,而控制台的输出似乎有重复的迹象:而 ...
- day_6.5 py
Wireshark的使用 2018-6-5 20:16:05 明天学 03
- Flask----基础
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- $(").each 和$.each
$(").each 这个是遍历dom树的,遍历数组的会报not afunction
- Lucene.net(4.8.0) 学习问题记录一:分词器Analyzer的构造和内部成员ReuseStategy
前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...
- gulp安装及使用流程
1. 安装nodejs 去 https://nodejs.org/en/下载安装文件安装即可. 安装完成后,在终端输入node -v回车打印出nodejs的版本号,说明nodejs安装成功. 在终端输 ...
- NLP任务:给定一句话,找出这句话中你想要的关键词,包括起始结束索引
在实际的nlp实际任务中,你有一大堆的人工标注的关键词,来新的一句话,找出这句话中的关键词,以便你以后使用,那如何来做呢? 1)用到正则的 finditer()方法,返回你匹配的关键词的迭代对象,包含 ...
- 一个生产可用的mysql参数文件my.cnf
[client]#客户端选项设置#设置客户端和连接字符集default_character_set = utf8port = 3306socket = /opt/mysql-5.6.24/tmp/my ...
- hung_task_timeout_secs和blocked for more than 120 seconds的解决方法
Linux系统出现hung_task_timeout_secs和blocked for more than 120 seconds的解决方法 Linux系统出现系统没有响应. 在/var/log/me ...
- jctable
1.jctable 选择单项并删除: var items = Co["MyTable"].GetSelected("HtmlEle"); if (items.l ...