内容简介:PyTorch是Facebook人工智能团队开发的一个机器学习和深度学习工具,用于处理大规模图像分析,包括物体检测,分割与分类。但是它的功能不仅限于此。它与其它深度学习框架结合,能够完成复杂的算法。PyTorch用Python和C++编写。PyTorch属于深度学习框架中的重要一员,与TensorFlow, Keras, Theano等其它深度学习框架不同,它是动态计算图模式,其应用模型支持在运行过程中根据运行参数动态改变,而其它框架都是静态计算图模式,其模型在运行之前就已经确定。以下是各个深度学习框架的热
什么是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/P... 。
注意:不妨了解下笔者的微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注~
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- OpenGL/OpenGL ES 入门:基础变换 - 初识向量/矩阵
- 支持向量机(一):支持向量机的分类思想
- 算法工程师的数学基础:线性代数中的向量和向量空间
- 支持向量机:LinearSVM
- 词向量
- 支持向量机
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Web Design
Ethan Watrall、Jeff Siarto / O’Reilly Media, Inc. / 2009-01-02 / USD 49.99
Want to know how to make your pages look beautiful, communicate your message effectively, guide visitors through your website with ease, and get everything approved by the accessibility and usability ......一起来看看 《Head First Web Design》 这本书的介绍吧!