pytorch 入门指南
两类深度学习框架的优缺点 动态图(PyTorch)
计算图的进行与代码的运行时同时进行的。
静态图(Tensorflow <2.0) 自建命名体系
自建时序控制
难以介入 使用深度学习框架的优点 GPU 加速 (cuda)
自动求导
常用网络层的API PyTorch 的特点 支持 GPU
动态神经网络
Python 优先
命令式体验
轻松扩展
.Pytorch简介
Pytorch是Facebook 的 AI 研究团队发布了一个基于 Python的科学计算包,旨在服务两类场合: 替代numpy发挥GPU潜能(在线环境暂时不支持GPU)
一个提供了高度灵活性和效率的深度学习实验性平台
.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等;
.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 代码;
官方宣传pytorch侧重两类用户:numpy的gpu版、深度学习研究平台
pytorch使用动态图机制,相比于tensorflow最开始的静态图,更为灵活
当前pytorch支持的系统包括:win,linux,macos
torch.Tensor:内含一些操作tensor的方法,可通过tensor.xx()进行调用
torch.nn:内含一些常用模型,如rnn,cnn等
torch.nn.functional:内含一些常用方法,如sigmoid,softmax等
torch.optim:内含一些优化算法,如sgd,adam等
torch.utils.data:内含一些数据迭代方法
torch.empty(3,4)
torch.rand(4,3)
torch.zeros(4,3, dtype=torch.int)
x = torch.tensor([3,4],dtype=torch.float)
x = torch.IntTensor([3,4])
x.shape
x.size()
x = torch.ones(3,4)
# 以下三个式子 含义相同
x = x + x
x = torch.add(x, x)
x.add_(x)
x[:,1]
x.view(-1)
x.view(4,3)
x = torch.randn(1)
x.item()
input = torch.randn(32, 32)
input = input.unsqueeze(0)
input.size()
x.data.requires_grad
x.type(torch.LongTensor)123456789101112131415161718192021222324252627282930313233343536373839404142434445
a= numpy.array([1,2,3])
a = torch.from_numpy(a)
a.numpy()1234
torch.cuda.is_available()
# 调用设备
device = torch.device('cpu') # cuda or cpu
a = torch.tensor([1,2,3], device='cuda') # 直接在gpu上创建
a = a.to(device) # 上传
a = a.to('cpu') # 上传, cpu or cuda
a = a.cuda() # 上传cuda12345678
.backward(), 计算梯度;如果单独一个值则不需指定参数,否则需传入权重(尺寸与tensor的size同)
.grad, 用于存储梯度累计值。 只有tensor有梯度值,计算节点没有
.detach(), 相当于新建了一个变量,历史的计算图无效
with torch.no_grad():, 评估模型时可用到,不计算梯度
.grad_fn, 节点是如何产生的;用户创造的tensor([1,2,3]).grad_fn 为None
.data(), tensor值,requires_grad=False
x = torch.ones(2,3,requires_grad=True)
x.requires_grad_(False)
x = torch.ones(2, 2, requires_grad=True)
y = x +2
z = y * y *3
out = torch.sum(z)
out.backward()
x.grad
with torch.no_grad():
x = torch.ones(2, 2, requires_grad=True)
y = x +2
z = y * y *3
out = torch.sum(z)
out.backward()
x.grad12345678910111213141516171819202122
Sequential定义
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# 下面通过实例变量的形式声明模型内需要学习的参数
self.fc1 = nn.Linear(5, 10)
self.fc2 = nn.Linear(10,20)
# 下面定义计算图
x = self.fc1(x)
x = nn.functional.relu(x)
x = self.fc2(x)
return x
net = Net()
net = Sequential(
nn.Linear(5, 10),
nn.Relu(),
nn.Linear(10, 20)
)12345678910111213141516171819202122
net.parameters() #可用for 迭代
net.zero_grad()12345
output = net(input)
loss = criterion(output, target)
loss.backward()
optimizer.step() 12345
with torch.no_grad():
output = net(input)123
torch.save(net, file)
net = torch.load(file)
torch.save(model.state_dict(), file)
net = Model()
net.load_state_dict(file)12345678
载入数据
数据处理
构建迭代器
模型
loss
optimizer
新建/载入模型
新建
载入
直接载入模型
载入参数
新建模型
载入模型参数(对于adam等优化器,其参数也需载入)
训练
x_batch, y_batch = batch
outputs = net(x_batch)
loss = criterion(output, target)
optimizer.zero_grad()
loss.backward()
optimizer.step()1234567
每隔一段时间,打印验证集loss
每隔一段时间,存储模型
测试
数据处理
构建迭代器(可选)
放入模型,输出结果
计算accuracy
pytorch 入门指南的更多相关文章
- NLP新手入门指南|北大-TANGENT
开源的学习资源:<NLP 新手入门指南>,项目作者为北京大学 TANGENT 实验室成员. 该指南主要提供了 NLP 学习入门引导.常见任务的开发实现.各大技术教程与文献的相关推荐等内容, ...
- Web API 入门指南 - 闲话安全
Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...
- Vue.js 入门指南之“前传”(含sublime text 3 配置)
题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴 ...
- yii2实战教程之新手入门指南-简单博客管理系统
作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...
- 【翻译】Fluent NHibernate介绍和入门指南
英文原文地址:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started 翻译原文地址:http://www.cnblogs ...
- ASP.NET MVC 5 入门指南汇总
经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章言简意赅,篇幅适中,从一个web网站示例开始讲解 ...
- 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍
我们在前一篇文章微软新神器-Power BI,一个简单易用,还用得起的BI产品中,我们初步介绍了Power BI的基本知识.由于Power BI是去年开始微软新发布的一个产品,虽然已经可以企业级应用, ...
- 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据
我们在文章: 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍中,我们介绍了官方入门文档的第一章.今天继续给大家介绍官方文档中,如何获取数据源的相关内容.虽然是英文,但 ...
- 一起学微软Power BI系列-官方文档-入门指南(3)Power BI建模
我们前2篇文章:一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍 和一起学微软Power BI系列-官方文档-入门指南(2)获取源数据 中,我们介绍了官方入门文档与获取 ...
随机推荐
- static 关键字的使用及说明
static 关键字主要有以下几种使用场景: 修饰类的成员变量. 修饰类的成员方法. 修饰类的代码块. 修饰内部类. 1. static 修饰类的成员变量时,被称为静态成员变量.引用 static 修 ...
- centos 7 ifcnfig提示:bash: ifconfig: command not found的解决方法
接着上一篇,配置完IP地址之后因为ip addr命令不符合我们的习惯,需要添加ifconfig命令 输入命令 yum -y install net-tools 即可解决
- 什么是css块级元素和内联元素
CSS文档流与块级元素(block).内联元素(inline),文档流这个概念理解了它,一堆CSS布局的理论都 变得易于理解,并且体会到CSS这套设计的合理性所在. 文档流 将窗体自上而下分成一行行, ...
- 面向对象编程思想(OOP)总结
本文我将从面向对象编程思想是如何解决软件开发中各种疑难问题的角度,来讲述我们面向对象编程思想的理解,梳理面向对象四大基本特性.七大设计原则和23种设计模式之间的关系. 软件开发中疑难问题: 软件复杂庞 ...
- 面向XX程序设计到底是个啥
面向过程编程:面向(对着)-->过程(流程步骤)-->编程(码代码) IPO是啥 input(输入)-->process(过程处理)-->output(输出) 未来码代码的目的 ...
- docker使用gitlab持续集成(1)
修改ssh连接端口vi /etc/ssh/sshd_config 写docker-compose.yml文件配置gitlab version: '3' services: gitlab: image: ...
- GetOpenFilename的基本用法
GetOpenFilename '一.概述基本语法 Application.GetOpenFilename 方法 显示标准的“打开”对话框,并获取用户文件名,而不必真正打开任何文件,只是把打开文件名称 ...
- python open函数关于w+ r+ 读写操作的理解(转)
r 只能读 (带r的文件必须先存在)r+ 可读可写 不会创建不存在的文件.如果直接写文件,则从顶部开始写,覆盖之前此位置的内容,如果先读后写,则会在文件最后追加内容.w+ 可读可写 如果文件存在 则覆 ...
- latex 引用文献 bib
study from : https://jingyan.baidu.com/article/925f8cb8bce1f0c0dce0564f.html 寻找文献 谷歌学术 from: https:/ ...
- 【JZOJ6368】质树(tree)
description 大神 wyp 手里有棵二叉树,每个点有一个点权.大神 wyp 的这棵树是质树,因为 随便找两个不同的点 u, v,只要 u 是 v 的祖先,都满足 u 和 v 的点权互质. 现 ...