PyTorch入门(一)向量

栏目: Python · 发布时间: 5年前

内容简介:PyTorch是Facebook人工智能团队开发的一个机器学习和深度学习工具,用于处理大规模图像分析,包括物体检测,分割与分类。但是它的功能不仅限于此。它与其它深度学习框架结合,能够完成复杂的算法。PyTorch用Python和C++编写。PyTorch属于深度学习框架中的重要一员,与TensorFlow, Keras, Theano等其它深度学习框架不同,它是动态计算图模式,其应用模型支持在运行过程中根据运行参数动态改变,而其它框架都是静态计算图模式,其模型在运行之前就已经确定。以下是各个深度学习框架的热

什么是PyTorch?

PyTorch入门(一)向量

PyTorch是Facebook人工智能团队开发的一个机器学习和深度学习工具,用于处理大规模图像分析,包括物体检测,分割与分类。但是它的功能不仅限于此。它与其它深度学习框架结合,能够完成复杂的算法。PyTorch用 Python 和C++编写。

PyTorch属于深度学习框架中的重要一员,与TensorFlow, Keras, Theano等其它深度学习框架不同,它是动态计算图模式,其应用模型支持在运行过程中根据运行参数动态改变,而其它框架都是静态计算图模式,其模型在运行之前就已经确定。以下是各个深度学习框架的热度对比:

PyTorch入门(一)向量

关于各个深度学习框架的对比,可以参考网址: 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入门(一)向量

检测是否为PyTorch中的向量

is_tensor()函数可以检测某个序列是否为PyTorch中的向量,is_storage()可以检测某个序列是否被存储为PyTorch中的向量。

PyTorch入门(一)向量

可以看到,Python中的列表并不是PyTorch中的向量,也不会被存储为PyTorch中的向量。那么,如何创建PyTorch中的向量呢?

创建随机向量

利用randn()函数可以创建随机向量,随机数为0~1的随机浮点数,可以指定创建的向量的维数。

PyTorch入门(一)向量

可以看到,我们创建了1*2*3维的向量,用size()函数可以查看向量的维数情况,用numel()函数可以查看向量中的所有元素个数。

创建零向量

利用zeros()函数可以创建零向量,即所有元素均为零的向量,只需指定向量的维数即可。

PyTorch入门(一)向量

在上面,我们创建了4*4的零向量。

创建单位向量

利用eye()函数可以创建单位向量,即主对角元素为1,其余元素均为零的向量,只需指定向量的维数即可。当二维向量的行数与列数不一样时,主对角元素为1,其余为0。

PyTorch入门(一)向量

从numpy中创建向量

PyTorch支持直接从numpy中创建向量,这为PyTorch和numpy提供了无缝对接,这也是PyTorch的一个优势。

PyTorch入门(一)向量

当然,PyTorch也可以将向量转化为numpy中的ndarrays.

PyTorch入门(一)向量

Tensor函数创建向量

可以利用Tensor()直接创建向量。

PyTorch入门(一)向量

linspace与logspace创建向量

linspace(tart, end, steps=100, out=None)通过指定开始值、终值和元素个数创建表示等差数列的一维数组,可以通过endpoint参数指定是否包含终值,默认值为True,即包含终值。

logspace(tart, end, steps=100, out=None)返回一个1维张量,包含在区间10exp(start)和10exp(end)上以对数刻度均匀间隔的 steps个点。

PyTorch入门(一)向量

创建均匀分布向量

rand()函数可以创建指定维数的满足均匀分布的向量。

PyTorch入门(一)向量

随机整数排列向量

randperm(n, out=None) ,给定参数n,返回一个从0 到n -1 的随机整数排列。

PyTorch入门(一)向量

等差数列向量

arange(start, end, step=1, out=None) , 返回一个1维张量,包含从start到end,以step为步长的一组序列值(默认步长为1)。

PyTorch入门(一)向量

寻找最大值、最小组

argmin()和argmax()函数可以寻找向量所在的最小值和最大值的下标,0表示沿着行查找,1表示沿着列查找。

PyTorch入门(一)向量

向量拼接

cat()函数在给定维度上对输入的张量序列seq 进行连接操作,默认的维度为0,即按行拼接。

PyTorch入门(一)向量

向量分块

chunk(tensor, chunks, dim=0)函数在给定维度(轴)上将输入张量进行分块,默认为0,即按行进行分块。

PyTorch入门(一)向量

gather()函数

gather(input, dim, index, out=None), 沿给定轴dim,将输入索引张量index指定位置的值进行聚合。gather()函数理解起来比较困难,先看例子,再解释:

PyTorch入门(一)向量

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_有相同的维度(在指定轴上)。

PyTorch入门(一)向量

split()函数

split(tensor, split_size, dim=0), 将输入张量分割成相等形状的chunks(如果可分)。 如果沿指定维的张量形状大小不能被split_size整分, 则最后一个分块会小于其它分块。

PyTorch入门(一)向量

向量转置

二维向量的转置可以用t()或transpos(1, 0)实现。

PyTorch入门(一)向量

unbind()

unbind(tensor, dim=0), 移除指定维后,返回一个元组,包含了沿着指定维切片后的各个切片,默认维度为1,表示行,1表示列。

PyTorch入门(一)向量

判断是否为零元素

nonzero()函数可以判断向量中的元素是否为0.

PyTorch入门(一)向量

向量运算

以下将演示几种常见的矩阵运算。

PyTorch入门(一)向量

矩阵的点乘与矩阵乘法

PyTorch入门(一)向量

总结

本文的github地址为: https://github.com/percent4/P...

注意:不妨了解下笔者的微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注~


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Haskell School of Expression

The Haskell School of Expression

Paul Hudak / Cambridge University Press / 2000-01 / USD 95.00

Functional programming is a style of programming that emphasizes the use of functions (in contrast to object-oriented programming, which emphasizes the use of objects). It has become popular in recen......一起来看看 《The Haskell School of Expression》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具