英语原文:Tensor Operations — Basic Building Blocks of Deep Learning

翻译:雷锋字幕组(大表哥、Shangru)


2012-至今:深度学习爆炸时代

在2012年的Imagenet运动之后,深度学习取得了突飞猛进的发展。 深度学习现在已经成为我们日常生活中不可或缺的一部分,当我们与语音助手交谈、使用家庭自动化系统、写电子邮件等时,许多算法都在运行。事实上,它的影响是如此之大,以至于我们可以在亚马逊上看到名为“婴儿的神经网络”的书籍:D

“深度”学习是如何发生的?

就其核心而言,深度学习只不过是人脑工作方式的缩影(忽略了人脑中存在的实际复杂性,这种复杂性仍然很难复制)。 计算机使用成百上千个跨越深层的神经元连接从它的输入和输出中学习(因此有了“深度学习”这个词)。

每一个神经元连接都有与自身相关的不同重量。

在每次迭代中对权值进行优化,使预测损失最小化,并以最高精度预测输出。计算机是机器,机器只懂数字。因此,在底层,我们讨论的所有这些权重都是n维矩阵或张量。

由于每个权值都是一个n维矩阵或张量,权值的学习和优化涉及数百万个矩阵乘法。在过去的6-7年中,我们已经看到许多DL框架的出现,它们简化了这个任务。

五大深度学习框架(Pythorch、Tensorflow、Keras、CNTK、Caffe)

什么是Pytorch

Pytorch是一个流行的深度学习框架,由Facebook人工智能研究(FAIR)开发和维护,用于处理张力。自2016年1.0.0发布以来,由于使用的简单性和灵活性,它获得了极大的普及。在本文中,我们将主要关注使用Pytorch的一些核心张量运算。您可能想通过这个博客了解如何安装PyTorch的详细说明。

  1. torch.size

  2. torch.mm

  3. torch.cat

  4. torch.mul

  5. torch.inverse

1.torch.size

Torch.size返回任何输入张量的维度。

x = torch.tensor([
                 [[1, 2, 3, 4],
                 [3, 4., 6, 7]],
                 [[10,20,30,40],
                  [20,30,40,50]],
                 [[5,6,7,8],
                  [9,10,11,12]]
                ])
x.size()
torch.Size([3, 2, 4])

在上面的示例中,我创建了一个3X2X4张量,torch.size返回3个维度。 我们的张量在外括号内有3个元素,每个元素都是一个矩阵。 每个矩阵同样有2个元素,每个元素都是一个包含4个元素的列表。

2.torch.mm

torch.mm返回任意两个输入矩阵matr1和mat2的矩阵乘法(不是元素一一对应相乘)

mat1 = torch.tensor([[1,2,3],
                   [4,5,6],
                   [6,7,8]])
mat2 = torch.tensor([[10,20,30],
                   [40,50,60],
                   [60,70,80]])
x = torch.mm(mat1, mat2)
y = mat1@mat2
x,y
(tensor([[ 270,  330,  390],         [ 600,  750,  900],         [ 820, 1030, 1240]]), tensor([[ 270,  330,  390],         [ 600,  750,  900],         [ 820, 1030, 1240]]))

在上面的示例中,mat1和mat2的大小均为3X3。 因此,torch.mm的输出大小也为3X3。 我们可以看到可以使用“ @”运算符代替torch.mm来执行相同的操作。

使用torch.mm()时要注意的几点

  • 第一个输入矩阵的列大小应等于第二个输入矩阵的行大小

  • 对于不是矩阵或大于2维的张量,torch.mm不起作用,我们可以使用torch.mul进行逐个元素的乘法

  • ‘@'运算符执行与torch.mm相同的操作

3.torch.cat

Torch.cat可以水平或垂直连接2个张量

#假设我们有以下2个张量,并尝试垂直连接它门x = torch.tensor([[1,3],
                [2,5],
                [3,6]])
y = torch.tensor([[10,30],
                 [20,50],
                 [30,60]])
z = torch.cat((x,y))
z
tensor([[ 1,  3],        [ 2,  5],        [ 3,  6],        [10, 30],        [20, 50],        [30, 60]])

我们可以看到,张量y已经堆叠在张量x的下方。

# 现在我们尝试着将它们水平连接起来x = torch.tensor([[1,3],
                [2,5],
                [3,6]])
y = torch.tensor([[10,30],
                 [20,50],
                 [30,60]])
z = torch.cat((x,y), dim = 1)
z
tensor([[ 1,  3, 10, 30],        [ 2,  5, 20, 50],        [ 3,  6, 30, 60]])

通过使用dim参数并将其设置为1,我们可以水平连接2个张量。 默认设置为0,这将导致垂直串联。

使用torch.cat时的注意事项

  • 使用dim = 1来水平连接张量

  • 可以连接任意数量的张量,但是,请确保张量在串联方向上的大小应相同

4.torch.mul

torch.mul 可对2个张量进行逐元素乘法。

mat1 = torch.tensor([[[1,2,3],
                   [4,5,6]],
                    [[5,6,7],
                    [8,9,10]],
                   [[11,12,13],
                   [13,14,15]]])
mat2 = torch.tensor([[[10,20,30],
                   [40,50,60]],
                    [[50,60,70],
                    [80,90,100]],
                   [[110,120,130],
                   [130,140,150]]])
x = torch.mul(mat1, mat2)
y = mat1 * mat2
z = mat1.mul(mat2)

x,y,z

(tensor([[[  10,   40,   90],
         [ 160,  250,  360]],

[[ 250,  360,  490],
         [ 640,  810, 1000]],

[[1210, 1440, 1690],
         [1690, 1960, 2250]]]),
tensor([[[  10,   40,   90],
         [ 160,  250,  360]],

[[ 250,  360,  490],
         [ 640,  810, 1000]],

[[1210, 1440, 1690],
         [1690, 1960, 2250]]]),

tensor([[[  10,   40,   90],
         [ 160,  250,  360]],

[[ 250,  360,  490],
         [ 640,  810, 1000]],

[[1210, 1440, 1690],
         [1690, 1960, 2250]]]))

我们可以看到逐元素乘法适用于任何维度的张量。使用*运算符或者使用a.mul(b),其中a和b为输入张量,也可以实现torch.mul的功能。

mat1 = torch.randn(1,1,4)
mat2 = torch.randn(2,2,4)
x = torch.mul(mat1, mat2)
y = mat1 * mat2
z = mat1.mul(mat2)

x,y,z
(tensor([[[ 0.3923,  1.2011, -0.7222, -0.0097],
         [-0.3082, -0.7667,  0.0777, -0.1011]],

[[-0.0289,  0.6919,  0.2720, -0.0952],
         [-0.3427, -1.1867, -1.0518, -0.0562]]]),
tensor([[[ 0.3923,  1.2011, -0.7222, -0.0097],
         [-0.3082, -0.7667,  0.0777, -0.1011]],

[[-0.0289,  0.6919,  0.2720, -0.0952],
         [-0.3427, -1.1867, -1.0518, -0.0562]]]),
tensor([[[ 0.3923,  1.2011, -0.7222, -0.0097],
         [-0.3082, -0.7667,  0.0777, -0.1011]],

[[-0.0289,  0.6919,  0.2720, -0.0952],
         [-0.3427, -1.1867, -1.0518, -0.0562]]]))

Torch.mul can be used for broadcasting of tensors. For tensors to be broadcastable, the following conditions should be met:

Each tensor should have atleast one dimension

When iterating over the dimension sizes, starting at the trailing dimension,

the dimension sizes must either be equal,

one of them is 1, or

one of them does not exist.

使用torch.mul时要注意的几点

  • torch.mul类似于两个向量之间的点积。

  • “ *”运算符或a.mul(b)也执行与torch.mm相同的操作

  • 输入张量应满足广播条件

5.torch.inverse

torch.inverse计算任意张量的逆

x = torch.rand(4, 4)
print(x)
y = torch.inverse(x)
print(y)

print(x@y)
tensor([[0.5113, 0.6916, 0.4692, 0.0154],
       [0.3848, 0.3022, 0.0248, 0.9268],
       [0.8846, 0.6778, 0.0108, 0.8708],
       [0.2503, 0.9674, 0.8385, 0.3985]])
tensor([[ 5.4673,  3.9426, -2.8567, -3.1387],
       [-7.0532, -7.4136,  6.1454,  4.0863],
       [ 6.5743,  6.5758, -5.9237, -2.6038],
       [-0.1456,  1.6838, -0.6596,  0.0402]])
tensor([[ 1.0000e+00, -5.8052e-07, -4.9533e-08,  2.9703e-09],
       [ 2.4891e-07,  1.0000e+00, -2.3864e-08, -1.8278e-07],
       [ 3.2888e-07,  2.2601e-08,  1.0000e+00, -1.5329e-07],
       [ 3.5323e-07, -2.4265e-08, -4.5756e-07,  1.0000e+00]])

这里,我们通过使用randn函数来建立了一个由随机数组成的4x4张量。torch.inverse可计算x的逆。Inv(x) @ X 则会返回一个单位矩阵。

使用torch.inverse需要注意的几点:

  • 只有在输入张量的各个维度的元素数量相同时才可以正常使用torch.inverse

  • torch.inverse 同样适用于3维张量。但是张量在各个方向上的维度需要相同或者为方阵张量。

总结

这篇文章里我主要提及了一下几点:

  • 什么是深度学习?

  • Pytorch是啥?

  • 什么是重要的张量运算?

  • 如何实现执行上述张量运算的核心功能?

  • 使用这些功能时要注意的几点是什么?

深度学习基础:张量运算相关推荐

  1. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 编程指南

    编程指南 目前飞桨(PaddlePaddle,以下简称Paddle)已经同时支持动态图和静态图两种编程方式, 本文主要侧重于介绍静态图的编程方法,关于动态图编程方法,请参考动态图机制-DyGraph. ...

  2. Deep learning with python notebooks 笔记 第一章 深度学习基础

    第一章 深度学习基础 好的图表比文字传达的信息量多 图1-1帮助理清了人工智能.机器学习和深度学习之间的关系. 图1-2 清晰的阐述了经典程序设计范式和机器学习一种新的编程范式的不同.两种范式引出了两 ...

  3. 第3章(3.11~3.16节)模型细节/Kaggle实战【深度学习基础】--动手学深度学习【Tensorflow2.0版本】

    项目地址:https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0 UC 伯克利李沐的<动手学深度学习>开源书一经推出便广受好评.很多开 ...

  4. Python深度学习(一)深度学习基础

    翻译自Deep Learning With Python(2018) 第一章 深度学习基础:https://www.jianshu.com/p/6c08f4ceab4c 第二章 深度学习的数学构建模块 ...

  5. 深度学习基础之卷积神经网络

    摘要 受Hubel和Wiesel对猫视觉皮层电生理研究启发,有人提出卷积神经网络(CNN),Yann Lecun 最早将CNN用于手写数字识别并一直保持了其在该问题的霸主地位.近年来卷积神经网络在多个 ...

  6. 第二次作业:“深度学习基础”

    第二次作业:"深度学习基础" 完成一篇博客,题目为 " 第二次作业:深度学习基础 " 第二次软工作业 第二次作业:"深度学习基础" 一.视频 ...

  7. 深度学习基础篇(一)

    深度学习基础篇(一) Part I 深度学习基础 本书1-4章将带你了解一些基本概念:什么是深度学习,它可以用来做什么以及它如何工作.此外,熟悉使用深度学习解决数据问题的典型工作流程.如果还没怎么了解 ...

  8. 深度学习基础(基本概念、优化算法、初始化、正则化等)

    2020-04-25 16:29:09 引言 深度学习目前已成为发展最快.最令人兴奋的机器学习领域之一,许多卓有建树的论文已经发表,而且已有很多高质量的开源深度学习框架可供使用.然而,论文通常非常简明 ...

  9. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 个性化推荐

    人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 个性化推荐 本教程源代码目录在book/recommender_system,初次使用请您参考Book文档使用说明. 说明: 硬件 ...

  10. 深度学习基础 | RNN家族全面解析

    作者 | Chilia 整理 | NewBeeNLP 首先,请阅读先修知识:深度学习基础 | 从Language Model到RNN 1. 梯度消失和梯度爆炸 1.1 梯度消失 [定义]当很多的层都用 ...

最新文章

  1. Android Q 变更和新特性
  2. Firefox做默认浏览器,点击QQ面板连接(QQ邮箱,空间),延迟很久很久才打开网页(Firefox 浏览器 延迟 打开 点击没反应)...
  3. 149. Leetcode 1005. K 次取反后最大化的数组和 (贪心算法-基础题目)
  4. linux查看新挂上的磁盘
  5. 在 Eclipse 中进行 局部 、全局搜索
  6. 水晶报表从VS2008升级到VS2010 注意事项
  7. Golang快速入门
  8. dubbo 运行过程
  9. windows配置端口映射
  10. 在中国mapinfo电子地图中添加投影教程
  11. openwrt刷回原厂固件_小米路由3刷机与刷回
  12. 基于halcon的HSV颜色匹配实例
  13. android 环信集成,Android 环信集成使用总结
  14. ESP32-CAM MicroPython配新板出现的PSRAM问题
  15. Arnold渲染器适合什么样的电脑配置
  16. win10查看计算机硬件配置,怎么看电脑配置,详细教您win10怎么看电脑配置
  17. 中日电脑相关词汇(超详版)
  18. 2014 top100
  19. 海外游戏代投需要注意的
  20. 新手小白入门latex排版

热门文章

  1. python坐标柱染色_Python matplotlib:在数据坐标中定位colorbar
  2. 2021.4.11 字节跳动实习笔试题---情报解密
  3. 二叉树前序遍历-递归与非递归
  4. numpy.where()用法
  5. Pytorch交叉熵损失函数torch.nn.functional as F
  6. python中字典dict的中的copy和deepcopy
  7. pandasDataFrame 的定位指定文件
  8. ndarray维度认识及np.concatenate函数详解
  9. numpy矩阵乘法的解惑
  10. 中文版GPT-3来了?智源研究院发布清源 CPM —— 以中文为核心的大规模预训练模型...