pytorch 的一些介绍以及常用工具包展示
文章目录
- 一、pytorch 简介
- 二、pytorch 优势
- 三、pytorch 常用工具包
- 四、pytorch 注意点
- 五、pytorch 理解
- 六、pytorch-Tensor
- 1. tensor 数据类型
- 2. 创建 tensor 相关的 API
- 3. tensor 对象的 API
- 七、python 自动求导
- 八、pytorch 神经网络
一、pytorch 简介
- Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的对多维矩阵数据进行操作的张量
(tensor )库,在机器学习和其他数学密集型应用有广泛应用。 - Pytorch的计算图是动态的,可以根据计算需要实时改变计算图。
- 由于Torch语言采用 Lua,导致在国内一直很小众,并逐渐被支持 Python 的 Tensorflow 抢走用户。作为经典机器学习库 Torch 的端口,PyTorch 为 Python 语言使用者提供了舒适的写代码选择。
二、pytorch 优势
- 1.简洁:
PyTorch的设计追求最少的封装,尽量避免重复造轮子。不像 TensorFlow 中充斥着session、graph、operation、name_scope、variable、tensor、layer等全新的概念,PyTorch 的设计遵循tensor→variable(autograd)→nn.Module 三个由低到高的抽象层次,分别代表高维数组(张量)、自动求导(变量)和神经网络(层/模块),而且这三个抽象之间联系紧密,可以同时进行修改和操作。 - 2.速度:
PyTorch 的灵活性不以速度为代价,在许多评测中,PyTorch 的速度表现胜过 TensorFlow和Keras 等框架。 - 3.易用:
PyTorch 是所有的框架中面向对象设计的最优雅的一个。PyTorch的面向对象的接口设计来源于Torch,而Torch的接口设计以灵活易用而著称,Keras作者最初就是受Torch的启发才开发了Keras。 - 4.活跃的社区:
PyTorch 提供了完整的文档,循序渐进的指南,作者亲自维护的论坛,供用户交流和求教问题。Facebook 人工智能研究院对 PyTorch 提供了强力支持。
三、pytorch 常用工具包
- torch :类似 NumPy 的张量库,支持GPU;
- torch.autograd :基于 type 的自动区别库,支持 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 注意点
特别注意一个问题:
通道问题:不同视觉库对于图像读取的方式不一样,图像通道也不一样:
opencv 的 imread 默认顺序时 H * W * C
pytorch的Tensor是 C * H * W
Tensorflow是两者都支持
五、pytorch 理解
- numpy风格的tensor操作
- pytorch对tensor提供的API参照了numpy
- 变量自动求导
- 在计算过程形成的计算图中,参与的变量可快速计算出自己对于目标函数的梯度
- 神经网络求导及损失函数优化等高层封装
- 网络层封装在torch.nn
- 损失函数封装在torch.functional
- 优化函数封装在torch.optim
六、pytorch-Tensor
1. tensor 数据类型
tensor数据类型:3浮点(float16,float32,float64)5整数(int16,int32,int64,int8+uint8)
Data type | dtype | CPU tensor | GPU tensor |
---|---|---|---|
16-bit floating point |
torch.float16 or torch.half
|
torch.HalfTensor
|
torch.cuda.HalfTensor
|
32-bit floating point |
torch.float32 or torch.float
|
torch.FloatTensor
|
torch.cuda.FloatTensor
|
64-bit floating point |
torch.float64 or torch.double
|
torch.DoubleTensor
|
torch.cuda.DoubleTensor
|
Data type | dtype | CPU tensor | GPU tensor |
---|---|---|---|
8-bit integer(unsigned) |
torch.uint8
|
torch.ByteTensor
|
torch.cuda.ByteTensor
|
8-bit integer(signed) |
torch.int8
|
torch.CharTensor
|
torch.cuda.CharTensor
|
16-bit integer(signed) |
torch.int16 or torch.short
|
torch.ShortTensor
|
torch.cuda.ShortTensor
|
32-bit integer(signed) |
torch.int32 or torch.int
|
torch.IntTensor
|
torch.cuda.IntTensor
|
64-bit integer(signed) |
torch.int64 or torch.long
|
torch.LongTensor
|
torch.cuda.LongTensor
|
2. 创建 tensor 相关的 API
创建tensor的常见api
方法名 | 说明 |
---|---|
Tensor() | 直接从参数构造张量,支持list和numpy数组 |
eye(row,column) | 创建指定行数&列数的单位tensor(单位阵) |
linspace(start,end,count) | 在[s,e]上创建c个元素的一维tensor |
logspace(start,end,count) | 在[10s,10e]上创建c个元素的一维tensor |
ones(size) | 返回指定shape的tensor,元素初始值为1 |
zeros(size) | 返回指定shape的tensor,元素初始值为0 |
ones_like(t) | 返回一个tensor,shape与t相同,且元素初始值为1 |
zeros_like(t) | 返回一个tensor,shape与t相同,且元素初始值为1 |
arange(s,e,sep) | 在区间[s,e)上以间隔sep生成一个序列张量 |
3. tensor 对象的 API
tensor 对象的方法
方法名 | 作用 |
---|---|
size() | 返回张量的shape |
numel() | 计算tensor的元素个数 |
view(shape) | 修改tensor的shape,与np.reshape相似,view返回的是对象的共享内存 |
resize | 类似于view,但在size超出时会重新分配内存空间 |
item | 若为单元素tensor,则返回python的scalar |
from_numpy | 从numpy数据填充 |
numpy | 返回ndarray类型 |
七、python 自动求导
tensor对象通过一系列运算组成动态图,每个tensor对象都有以下几个控制求导的属性。
变量 | 作用 |
---|---|
requird_grad | 默认为False,表示变量是狗需要计算导数 |
grad_fn | 变量的梯度函数 |
grad | 变量对应的梯度 |
八、pytorch 神经网络
torch.nn提供了创建神经网络的基础构件,这些层都继承自Module类。下面是自己手动实现一个线性层(linear layer)。适当参考,以后直接调用现成的接口,这里稍微了解一下,无实际意义。
import torchclass Linear(torch.nn.Module):def __init__(self, in_features, out_features, bias=True):super(Linear, self).__init__()# torch.randn() 返回一个符合均值为0,方差为1的正态分布self.weight = torch.nn.Parameter(torch.randn(out_features, in_features))if bias:self.bias = torch.nn.Parameter(torch.randn(out_features))def forward(self, x):# xW+bx = x.mm(self.weight)if self.bias:x = x + self.bias.expand_as(x)return xif __name__ == '__main__':net = Linear(3,2)x = net.forwardprint('11',x)
下面表格中列出了比较重要的神经网络层组件。
对应的在nn.functional模块中,提供这些层对应的函数实现。
通常对于可训练参数的层使用module,而对于不需要训练参数的层如softmax这些,可以使用functional中的函数。
一些容器:
容器类型 | 功能 |
---|---|
Module | 神经网络模块基类 |
Sequential | 序贯模型,类似keras,用于构建序列型神经网络 |
ModuleList | 用于存储层,不接受输入 |
Parameters(t) | 模块的属性,用于保存其训练参数 |
ParameterList | 参数列表1 |
容器代码:
# 方法1 像
model1 = nn.Sequential()
model.add_module('fc1', nn.Linear(3,4))
model.add_module('fc2', nn.Linear(4,2))
model.add_module('output', nn.Softmax(2))# 方法2
model2 = nn.Sequential(nn.Conv2d(1,20,5),nn.ReLU(),nn.Conv2d(20,64,5),nn.ReLU())
# 方法3
model3 = nn.ModuleList([nn.Linear(3,4), nn.ReLU(), nn.Linear(4,2)])
- torch.nn.Module提供了神经网络的基类,当实现神经网络时需要继承自此模块,并在初始化函数中创建网络需要包含的层,并实现forward函数完成前向计算,网络的反向计算会由自动求导机制处理。
- 通常将需要训练的层写在init函数中,将参数不需要训练的层在forward方法里调用对应的函数来实现相应的层。
编码三步走:
在pytorch中就只需要分三步:
- 写好网络;
- 编写数据的标签和路径索引;
- 把数据送到网络。
pytorch 的一些介绍以及常用工具包展示相关推荐
- 技巧 | 如何使用R语言的常用工具包绘制双变量填充地图
之前本号转载了DataCharm公众号的一篇推送: 转载 | 双变量映射地图可视化绘制方法 这篇推送使用了biscale工具包绘制了双变量填充地图.近来,小编发现使用常用的绘图工具包也能很便捷的绘制这 ...
- java apache commons_Apache commons(Java常用工具包)简介
Apache Commons是一个非常有用的工具包,解决各种实际的通用问题,下面是一个简述表,详细信息访问http://jakarta.apache.org/commons/index.html Be ...
- Unity脚本介绍和常用API
Unity脚本介绍和常用API 脚本介绍 1.脚本 介绍 语法结构 编译过程 2.开发工具 MonoDevelop Visual Studio 3.脚本生命周期 简介 脚本生命周期的阶段 1.初始阶段 ...
- HuTool工具的使用介绍和常用案例
HuTool工具的使用介绍和常用案例 一. 是什么 一个小而全的java工具类,静态方法封装.由开源项目作者的项目中一个util包衍变而来,里面包含了各种平时我们会用到的工具类. 官方文档 二 ...
- openresty开发系列12--lua介绍及常用数据类型简介
openresty开发系列12--lua介绍及常用数据类型简介 lua介绍 1993 年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de ...
- linux下常用的关机命令有:shutdown、halt、poweroff、init;重启命令有:reboot。下面本文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法。
linux下常用的关机命令有:shutdown.halt.poweroff.init:重启命令有:reboot.下面本文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法. 原创未通过审 ...
- 面试英语自我介绍的常用词汇
面试英语自我介绍的常用词汇 面试英语自我介绍的常用词汇 Words & Expressions&范文 精华汇总贴 想 找一份满意的工作吗?面试中面对外国老板连珠炮似的提问,有没有觉得心 ...
- c语言variant是什么变量,介绍一些常用数据类型的使用。先定义一些常见类型变量借以.doc...
介绍一些常用数据类型的使用.先定义一些常见类型变量借以说明 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char us ...
- redis 介绍和常用命令
redis 介绍和常用命令 redis简介 Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统.由于 Redis 的键 ...
最新文章
- 谷歌发布最新看图说话模型,可实现零样本学习,多类型任务也能直接上手
- 写给程序员的 HR 面试指南,助你踢好面试的临门一脚!
- R语言ggplot2可视化:使用R原生plot函数为指定曲线下面的区域着色、ggplot2可视化在曲线的特定下方添加分割线、ggplot2为指定曲线下面的区域着色
- H5页面获取原生APP的登录状态
- Oracle MD5加密
- 如何:修改 Office Open XML 文档【转载】
- [数据库] MySQL基础知识之日期判断及添加排序序号
- windows与linux网络设置(host-only)
- iOS c语言 基本运算符
- LeetCode 1669合并两个链表-中等
- vim循环下表复制_Vimrc Init.vim太长了?不存在的
- python-函数的闭包
- 一维FDTD等离子体的Matlab,修正过的一维FDTD等离子体MATLAB代码(公式修正)
- talentcentral测评结果_WinTalent人才测评系统
- Centos打开、关闭、结束tomcat,及查看tomcat运行日志
- 怎么更改wifi频段_如何更改wifi的频段
- Selenium WebDriver使用IE浏览器
- Python 爬取微信公众号文章和评论 (有源码)
- android 应用图标替换后手机安装还显示旧的图标或者显示android小人人
- 电脑显示更改默认服务器如何选择,电脑设置服务器在哪里设置
热门文章
- java云同桌学习系列(十)——网络编程
- 视频教程-ZStack 带你0基础搭建私有云平台|ZCCT实战培训视频|-云平台
- 最新MT6757/p20芯片资料集锦(datasheet,参考设计,PCB,原理图)
- python计算时间差_Python:计算时间差
- yiter matlab,matlab程序注解
- Latex Tips: argmin/max, 连加和、连乘积等的上、下标输入方法
- 【音视频第2天】RTC 系统音频弱网对抗技术发展与实践
- CF 8C Looking for Order
- Swagger、Yapi接口管理服务_SE
- (附源码)计算机毕业设计SSM基于的高速收费系统