PyTorch入门(一)向量
什么是PyTorch?
PyTorch是Facebook人工智能团队开发的一个机器学习和深度学习工具,用于处理大规模图像分析,包括物体检测,分割与分类。但是它的功能不仅限于此。它与其它深度学习框架结合,能够完成复杂的算法。PyTorch用Python和C++编写。
PyTorch属于深度学习框架中的重要一员,与TensorFlow, Keras, Theano等其它深度学习框架不同,它是动态计算图模式,其应用模型支持在运行过程中根据运行参数动态改变,而其它框架都是静态计算图模式,其模型在运行之前就已经确定。以下是各个深度学习框架的热度对比:
关于各个深度学习框架的对比,可以参考网址:Comparison of deep learning software
。
PyTorch是使用GPU和CPU优化的深度学习张量库。
下面,我们将一起来学习PyTorch中向量(Tensor)的相关操作。
安装与运行
PyTorch的安装十分简单,需要用pip安装即可:
pip3 install torch
pip3 install torchvision
其中torchvision包含了一些torch内置的图片与视频数据集。
用以下的Python代码可以输出安装的PyTorch版本信息:
import torch
print(torch.version.__version__)
在笔者的电脑上,输出的结果如下:
1.0.1.post2
向量的基本操作
导入模块
检测是否为PyTorch中的向量
is_tensor()函数可以检测某个序列是否为PyTorch中的向量,is_storage()可以检测某个序列是否被存储为PyTorch中的向量。
可以看到,Python中的列表并不是PyTorch中的向量,也不会被存储为PyTorch中的向量。那么,如何创建PyTorch中的向量呢?
创建随机向量
利用randn()函数可以创建随机向量,随机数为0~1的随机浮点数,可以指定创建的向量的维数。
可以看到,我们创建了1*2*3维的向量,用size()函数可以查看向量的维数情况,用numel()函数可以查看向量中的所有元素个数。
创建零向量
利用zeros()函数可以创建零向量,即所有元素均为零的向量,只需指定向量的维数即可。
在上面,我们创建了4*4的零向量。
创建单位向量
利用eye()函数可以创建单位向量,即主对角元素为1,其余元素均为零的向量,只需指定向量的维数即可。当二维向量的行数与列数不一样时,主对角元素为1,其余为0。
从numpy中创建向量
PyTorch支持直接从numpy中创建向量,这为PyTorch和numpy提供了无缝对接,这也是PyTorch的一个优势。
当然,PyTorch也可以将向量转化为numpy中的ndarrays.
Tensor函数创建向量
可以利用Tensor()直接创建向量。
linspace与logspace创建向量
linspace(tart, end, steps=100, out=None)通过指定开始值、终值和元素个数创建表示等差数列的一维数组,可以通过endpoint参数指定是否包含终值,默认值为True,即包含终值。
logspace(tart, end, steps=100, out=None)返回一个1维张量,包含在区间10exp(start)和10exp(end)上以对数刻度均匀间隔的 steps个点。
创建均匀分布向量
rand()函数可以创建指定维数的满足均匀分布的向量。
随机整数排列向量
randperm(n, out=None) ,给定参数n,返回一个从0 到n -1 的随机整数排列。
等差数列向量
arange(start, end, step=1, out=None) , 返回一个1维张量,包含从start到end,以step为步长的一组序列值(默认步长为1)。
寻找最大值、最小组
argmin()和argmax()函数可以寻找向量所在的最小值和最大值的下标,0表示沿着行查找,1表示沿着列查找。
向量拼接
cat()函数在给定维度上对输入的张量序列seq 进行连接操作,默认的维度为0,即按行拼接。
向量分块
chunk(tensor, chunks, dim=0)函数在给定维度(轴)上将输入张量进行分块,默认为0,即按行进行分块。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UhJKI93l-1611561568147)(https://upload-images.jianshu.io/upload_images/9419034-cc0a811d0fbd34b7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
gather()函数
gather(input, dim, index, out=None), 沿给定轴dim,将输入索引张量index指定位置的值进行聚合。gather()函数理解起来比较困难,先看例子,再解释:
gather的作用是这样的,index是索引,具体是行还是列的索引要看前面dim ,比如对于我们的例子, [[11, 12], [23, 24]], 指定dim=1,也就是横向,那么索引就是列号。index的大小就是输出的大小,所以比如index是[[0,0], [1,0]],那么看index第一行,0列指的是11,同理,第二行为1, 0 , 这样就是[24, 23],参考这样的解释看上面的输出结果,即可理解gather的含义。
索引
index_select(input, dim, index, out=None) ,沿着指定维度对输入进行切片,取index中指定的相应项(index为一个LongTensor),然后返回到一个新的张量,返回的张量与原始张量_Tensor_有相同的维度(在指定轴上)。
split()函数
split(tensor, split_size, dim=0), 将输入张量分割成相等形状的chunks(如果可分)。 如果沿指定维的张量形状大小不能被split_size整分, 则最后一个分块会小于其它分块。
向量转置
二维向量的转置可以用t()或transpos(1, 0)实现。
unbind()
unbind(tensor, dim=0), 移除指定维后,返回一个元组,包含了沿着指定维切片后的各个切片,默认维度为1,表示行,1表示列。
判断是否为零元素
nonzero()函数可以判断向量中的元素是否为0.
向量运算
以下将演示几种常见的矩阵运算。
矩阵的点乘与矩阵乘法
总结
本文的github地址为:https://github.com/percent4/PyTorch_Learning/blob/master/pytorch_tensor_demo.ipynb 。
注意:不妨了解下笔者的微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注~
PyTorch入门(一)向量相关推荐
- PyTorch入门-词向量
一. 概念 1 . 词的表示 在自然语言处理任务中,首先需要考虑词如何在计算机中表示.通常,有两种表示方式:one-hot representation和distribution representa ...
- [pytorch] Pytorch入门
Pytorch入门 简单容易上手,感觉比keras好理解多了,和mxnet很像(似乎mxnet有点借鉴pytorch),记一记. 直接从例子开始学,基础知识咱已经看了很多论文了... import t ...
- pytorch 矩阵相乘_深度学习 — — PyTorch入门(三)
点击关注我哦 autograd和动态计算图可以说是pytorch中非常核心的部分,我们在之前的文章中提到:autograd其实就是反向求偏导的过程,而在求偏导的过程中,链式求导法则和雅克比矩阵是其实现 ...
- 网易云课程:深度学习与PyTorch入门实战
网易云课程:深度学习与PyTorch入门实战 01 深度学习初见 1.1 深度学习框架简介 1.2 pytorch功能演示 2开发环境安装 3回归问题 3.1简单的回归问题(梯度下降算法) 3.3回归 ...
- 深度学习框架PyTorch入门与实践:第二章 快速入门
本章主要介绍两个内容,2.1节介绍如何安装PyTorch,以及如何配置学习环境:2.2节将带领读者快速浏览PyTorch中主要内容,给读者一个关于PyTorch的大致印象. 2.1 安装与配置 2.1 ...
- 深度学习 — — PyTorch入门(三)
点击关注我哦 autograd和动态计算图可以说是pytorch中非常核心的部分,我们在之前的文章中提到:autograd其实就是反向求偏导的过程,而在求偏导的过程中,链式求导法则和雅克比矩阵是其实现 ...
- PyTorch | (2)PyTorch 入门-张量
PyTorch | (1)初识PyTorch PyTorch | (2)PyTorch 入门-张量 PyTorch 是一个基于 Python 的科学计算包,主要定位两类人群: NumPy 的替代品,可 ...
- PyTorch入门v2.pptx
给本科生入门深度学习的PyTorch使用总结,图比较多. 若需要原版ppt,关注公众号,回复"pytorch入门"可以获取下载地址. 若需要原版ppt,关注公众号,回复" ...
- PyTorch 入门实战
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_36556893/article/ ...
最新文章
- 信息化建设工程的有效成本及定价分析(1)
- 使用jQuery的9个误区
- spring boot 学习(二)spring boot 框架整合 thymeleaf
- 关于魔法方法的一点总结
- java如何构造ajax回调参数,jQuery实现ajax回调函数带入参数的方法示例
- 2013年第四季度总结报告
- 虚函数、纯虚函数、虚函数与析构函数
- 51nod 1103 N的倍数 思路:抽屉原理+前缀和
- C# 的 Console类
- mysql入门优化_MySQL数据库:MySQL十大优化技巧详解
- Java SSM框架之MyBatis3(六)MyBatis之参数传递
- cur前缀_每天1分钟背单词 词根cur
- android多个单选按钮互斥使用,在GUI设计中,单选按钮用来实现用户在多个选项中的互斥选择,在同一组内多个选项中只能选择一个,当...
- pyjion python3.6_Pyjion的代码质量一例 [20160221]
- 分组码--原理,码率,软硬判决,编码增益
- let var const的区别
- Java里面的Lambda表达式
- react 中子路由(route)或二级路由如何配置?
- 倒三角打印乘法口诀python_Python打印乘法口诀表
- 一个C++程序员的学习经历
热门文章
- drat中const和final
- other, the other, others, the others与another的用法区别
- Ubuntu18.04解决蓝牙耳机无法连接问题
- App测试要点提取和分析
- 【论文翻译】HCL2000—A Handwritten Chinese Character Database
- 礼品定制APP开发的功能
- IE浏览器主页被hao123等篡改的解决办法
- 张萌韩墨羽——Ument_Share集成
- Alook搭配JS脚本完美食用
- python装饰器哪个好_[Python] 对 Python 装饰器的理解心得