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,即按行进行分块。

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] Pytorch入门
Pytorch入门 简单容易上手,感觉比keras好理解多了,和mxnet很像(似乎mxnet有点借鉴pytorch),记一记. 直接从例子开始学,基础知识咱已经看了很多论文了... import t ...
- pytorch 入门指南
两类深度学习框架的优缺点 动态图(PyTorch) 计算图的进行与代码的运行时同时进行的. 静态图(Tensorflow <2.0) 自建命名体系 自建时序控制 难以介入 使用深度学习框架的优点 ...
- Pytorch入门——手把手教你MNIST手写数字识别
MNIST手写数字识别教程 要开始带组内的小朋友了,特意出一个Pytorch教程来指导一下 [!] 这里是实战教程,默认读者已经学会了部分深度学习原理,若有不懂的地方可以先停下来查查资料 目录 MNI ...
- Pytorch入门中 —— 搭建网络模型
本节内容参照小土堆的pytorch入门视频教程,主要通过查询文档的方式讲解如何搭建卷积神经网络.学习时要学会查询文档,这样会比直接搜索良莠不齐的博客更快.更可靠.讲解的内容主要是pytorch核心包中 ...
- Pytorch入门随手记
Pytorch入门随手记 什么是Pytorch? Pytorch是Torch到Python上的移植(Torch原本是用Lua语言编写的) 是一个动态的过程,数据和图是一起建立的. tensor.dot ...
- 超简单!pytorch入门教程(五):训练和测试CNN
我们按照超简单!pytorch入门教程(四):准备图片数据集准备好了图片数据以后,就来训练一下识别这10类图片的cnn神经网络吧. 按照超简单!pytorch入门教程(三):构造一个小型CNN构建好一 ...
- pytorch入门2.2构建回归模型初体验(开始训练)
pytorch入门2.x构建回归模型系列: pytorch入门2.0构建回归模型初体验(数据生成) pytorch入门2.1构建回归模型初体验(模型构建) pytorch入门2.2构建回归模型初体验( ...
- pytorch入门2.0构建回归模型初体验(数据生成)
pytorch入门2.x构建回归模型系列: pytorch入门2.0构建回归模型初体验(数据生成) pytorch入门2.1构建回归模型初体验(模型构建) pytorch入门2.2构建回归模型初体验( ...
- pytorch入门2.1构建回归模型初体验(模型构建)
pytorch入门2.x构建回归模型系列: pytorch入门2.0构建回归模型初体验(数据生成) pytorch入门2.1构建回归模型初体验(模型构建) pytorch入门2.2构建回归模型初体验( ...
随机推荐
- MDK5使用Jlink下载显示 no cortex m sw divice 解决办法
问题: (1)下面界面中找不到设备 (2)下载程序的时候提示" no cortex m sw divice " 然后是"target dll has been cance ...
- Android+appium +python 点击坐标tap方法的封装
当常使用的查找点击元素的方法name.id.classname等无法使用时,我们将会采取坐标的点击来实现操作,同样存在一个问题,当手机的分辨率.屏幕大小不一致时,坐标的定位也会不同,因此将采用相对坐标 ...
- Vue学习小结(二)
接上一批,小结(二). 三.导航内容(含左侧导航及顶部面包屑导航) 其实导航条主要根据element-ui的教程进行编写,官网:http://element-ui.cn/#/zh-CN/compone ...
- eShopOnContainers 知多少[8]:Ordering microservice
1. 引言 Ordering microservice(订单微服务)就是处理订单的了,它与前面讲到的几个微服务相比要复杂的多.主要涉及以下业务逻辑: 订单的创建.取消.支付.发货 库存的扣减 2. 架 ...
- Thymeleaf【快速入门】
前言:突然发现自己给自己埋了一个大坑,毕设好难..每一个小点拎出来都能当一个小题目(手动摆手..),没办法自己选的含着泪也要把坑填完..先一点一点把需要补充的知识学完吧.. Thymeleaf介绍 稍 ...
- CopyOnWriteArrayList你都不知道,怎么拿offer?
前言 只有光头才能变强 前一阵子写过一篇COW(Copy On Write)文章,结果阅读量很低啊...COW奶牛!Copy On Write机制了解一下 可能大家对这个技术比较陌生吧,但这项技术是挺 ...
- Java中三目运算符不为人知的坑
一.思考题 以下代码可能有什么错误?为什么? import java.util.HashMap; import java.util.Map; public class Test { public st ...
- Win64下编译OSG详细过程(Win10+VS2015+OSG3.6.3)
目录 1. 数据资源准备 2. 编译第三方库 3. 编译GDAL 4. 编译OSG 1) CMAKE_INSTALL_PREFIX: 2) BUILD_OSG_EXAMPLES/BUILD_MFC_ ...
- LOJ #6050. 「雅礼集训 2017 Day11」TRI
完全不会的数学神题,正解留着以后填坑 将一个口胡的部分分做法,我们考虑计算格点多边形(包括三角形)面积的皮克公式: \[S=a+\frac{1}{2}b-1\text({a为图形内部节点个数,b为边界 ...
- 使用 whistle 替代本地 nginx/webpack 服务
加入鹅厂之后,我发现团队都在用一款叫做 Whistle 的工具,起初我以为这只是一款类似 Fiddler/Charles 的普通货色.然鹅,发现下面这两种用法之后,我把自己的膝盖摘下来献给了制作这款工 ...