深度学习:张量 介绍

这篇具有很好参考价值的文章主要介绍了深度学习:张量 介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

张量[1]是向量和矩阵到 n 维的推广。了解它们如何相互作用是机器学习的基础。

简介

虽然张量看起来是复杂的对象,但它们可以理解为向量和矩阵的集合。理解向量和矩阵对于理解张量至关重要。

向量是元素的一维列表:

深度学习:张量 介绍,深度学习

矩阵是向量的二维列表:

深度学习:张量 介绍,深度学习

下标表示(行,列)。考虑矩阵的另一种方式是用向量作为元素的向量。请注意,它们通常用大写字母表示。

3D 张量可以被视为三维矩阵列表:

深度学习:张量 介绍,深度学习

考虑 3D 张量的另一种方式是使用矩阵作为元素的向量。请注意,在本文中它们是用书法大写字母标注的。

4D 张量可以被认为是 3D 张量的四维列表:

深度学习:张量 介绍,深度学习

考虑 4D 张量的另一种方式是使用 3D 张量作为其元素的向量。这些可能会变得越来越复杂,但这是继续使用张量进行运算所必需的程度。

向量运算

深度学习:张量 介绍,深度学习

假设这些是相同长度的向量,i。接下来的操作主要是按元素进行的。这意味着每个向量中的相应元素被一起操作。

加法

深度学习:张量 介绍,深度学习
import torch

x = torch.tensor([135])
y = torch.tensor([374])

x + y

# tensor([ 4, 10,  9])

减法

深度学习:张量 介绍,深度学习
x = torch.tensor([135])
y = torch.tensor([374])

x - y

# tensor([-2, -4,  1])

点乘

深度学习:张量 介绍,深度学习

这也可以用求和来表示:

深度学习:张量 介绍,深度学习
x = torch.tensor([135])
y = torch.tensor([374])

torch.dot(x, y) # 1*3 + 3*7 + 5*4 = 3 + 21 + 20 = 44

# tensor(44)

这也可以用 x @ y 来执行。点积的输出是一个标量。它不返回向量。

Hadamard(乘法)

深度学习:张量 介绍,深度学习

Hadamard 乘积用于执行逐元素乘法并返回一个向量。

x = torch.tensor([135])
y = torch.tensor([374])

x * y

# tensor([ 3, 21, 20])

标量乘法

深度学习:张量 介绍,深度学习

k 是标量,在大多数情况下是实数。

k = 5
x = torch.tensor([135])

k * x

# tensor([ 5, 15, 25])

由于 k 可以是分数,因此这也可以被视为标量除法。

矩阵乘法

请记住,矩阵是向量的集合。相同的操作适用于向量,但在涉及行和列时还有一些规则需要注意。

假设如下,其中 X 和 Y 的形状为 (4,3):

深度学习:张量 介绍,深度学习

加法

深度学习:张量 介绍,深度学习
X = torch.tensor([[135],
                  [361],
                  [685],
                  [732]])

Y = torch.tensor([[632],
                  [854],
                  [317],
                  [183]])

X + Y

# tensor([[ 7,  6,  7],
        [1111,  5],
        [ 9,  912],
        [ 811,  5]])

减法

深度学习:张量 介绍,深度学习
X = torch.tensor([[135],
                  [361],
                  [685],
                  [732]])

Y = torch.tensor([[632],
                  [854],
                  [317],
                  [183]])

X - Y

# tensor([[-5,  0,  3],
        [-5,  1-3],
        [ 3,  7-2],
        [ 6-5-1]])

点积

深度学习:张量 介绍,深度学习

在执行矩阵乘法时,重要的是要将矩阵视为由向量组成。通过这个视图,就可以清楚如何在矩阵上执行点积。发生乘法的唯一方法是第一个矩阵中的行数与第二个矩阵中的列数匹配。这导致:

  • (m, n) x (n, r) = (m, r)

如果情况并非如此,则必须转置其中一个矩阵以适应该顺序;这会切换行和列,但保留点积的向量。

在上图中,很明显,左侧矩阵中的每个向量(或行)都乘以第二个矩阵中的每个向量(或列)。因此,在此示例中,A 中的每个向量必须与 B 中的每个向量相乘,从而产生 16 个点积。

X = torch.tensor([[135],
                  [361],
                  [685],
                  [732]])

Y = torch.tensor([[632],
                  [854],
                  [317],
                  [183]])

X.matmul(Y.T) # X @ Y.T

# tensor([[ 25,  43,  41,  40],
        [ 38,  58,  22,  54],
        [ 70108,  61,  85],
        [ 55,  79,  38,  37]])

Hadamard 积

深度学习:张量 介绍,深度学习

Hadamard 乘积是逐元素乘法,因此其执行方式与加法和减法相同。

X = torch.tensor([[135],
                  [361],
                  [685],
                  [732]])

Y = torch.tensor([[632],
                  [854],
                  [317],
                  [183]])

X * Y

# tensor([[ 6,  9, 10],
        [2430,  4],
        [18,  835],
        [ 724,  6]])

标量乘法

深度学习:张量 介绍,深度学习
k = 5
X = torch.tensor([[135],
                  [361],
                  [685],
                  [732]])

k * X

# tensor([[ 5, 15, 25],
        [1530,  5],
        [304025],
        [351510]])

三维张量运算

张量运算要求两个张量具有相同的大小,除非正在执行点积。

对于本节中的逐元素运算,假设两个张量的形状为 (3, 3, 2)。这意味着两个张量都包含三个 (3,2) 矩阵。如下所示:

import torch

gen = torch.Generator().manual_seed(2147483647)

X = torch.randint(010, (332), generator=gen)
Y = torch.randint(010, (332), generator=gen)

X = tensor([[[14],
             [92],
             [30]],

            [[46],
             [77],
             [15]],

            [[68],
             [14],
             [49]]])

Y = tensor([[[80],
             [36],
             [60]],

            [[91],
             [00],
             [22]],

            [[71],
             [81],
             [90]]])

加法

加法是按元素进行的,并且按预期执行。每个张量中对应的元素相互相加。

X + Y

tensor([[[ 9,  4],
         [12,  8],
         [ 9,  0]],

        [[13,  7],
         [ 7,  7],
         [ 3,  7]],

        [[13,  9],
         [ 9,  5],
         [13,  9]]])

减法

减法也是按元素进行的并且按预期执行。

X - Y

tensor([[[-7,  4],
         [ 6-4],
         [-3,  0]],

        [[-5,  5],
         [ 7,  7],
         [-1,  3]],

        [[-1,  7],
         [-7,  3],
         [-5,  9]]])

点积

深度学习:张量 介绍,深度学习

张量乘法比二维中的张量乘法稍微复杂一些。之前,矩阵乘法只有满足以下条件才能发生:

  • (m, n) x (n, r) = (m, r)

在三个维度上,这仍然是一个要求。但是,第一个轴必须相同:

  • (z, m, n) x (z, n, r) = (z, m, r)

为什么是这样?嗯,如前所述,二维的点积主要是将向量彼此相乘。在三维中,重点是按矩阵相乘,然后对这些矩阵中的每个向量执行点积。

上图应该有助于解释这一点。将两个 3D 张量视为矩阵向量可能会有所帮助。由于点积是通过按元素相乘然后求和来执行的,因此首先发生的事情是每个矩阵与其相应的矩阵相乘。当这种情况发生时,矩阵乘法会导致矩阵中的每个向量与其他向量执行点积。从某种意义上说,它就像一个嵌套的点积。

为了使 和 彼此相乘,必须调换 的第二轴和第三轴。并且两者的大小均为 (3, 3, 2)。这意味着必须变成(3,2,3)。这可以使用 Y.permute(0, 2, 1) 来完成,它转置第二和第三轴。或者,可以使用 Y.transpose(1,2)。

print(Y.transpose(1,2))
print(Y.transpose(1,2).shape) # Y.permute(0, 2, 1)

tensor([[[836],
         [060]],

        [[902],
         [102]],

        [[789],
         [110]]])

torch.Size([323])

通过适当的调整大小,现在可以使用 matmul 或 @ 执行张量乘法。输出的形状应为 (3, 3, 2) x (3, 2, 3) = (3, 3, 3)。

X.matmul(Y.transpose(1,2)) # X @ Y.transpose(1,2)

tensor([[[ 827,  6],
         [723954],
         [24,  918]],

        [[42,  020],
         [70,  028],
         [14,  012]],

        [[505654],
         [1112,  9],
         [374136]]])

Hadamard 积

Hadamard 积的性能符合预期,并在 3D 张量的矩阵中按元素相乘。

X * Y

tensor([[[ 8,  0],
         [2712],
         [18,  0]],

        [[36,  6],
         [ 0,  0],
         [ 210]],

        [[42,  8],
         [ 8,  4],
         [36,  0]]])

标量乘法

标量乘法也按预期执行。

k = 5
k*X

tensor([[[ 520],
         [4510],
         [15,  0]],

        [[2030],
         [3535],
         [ 525]],

        [[3040],
         [ 520],
         [2045]]])

四维张量运算

四维张量运算仍然要求两个张量具有相同的大小。

对于本部分,假设形状为 (2, 3, 3, 2)。这意味着两个 4D 张量都包含两个 3D 张量,并且每个张量都包含三个 (3,2) 矩阵。如下所示:

import torch

gen = torch.Generator().manual_seed(2147483647)

X = torch.randint(010, (2332), generator=gen)
Y = torch.randint(010, (2332), generator=gen)

X
# 4d tensor
tensor([
# 3d tensor
        [
         # matrix 1
         [[14],
          [92],
          [30]],
         # matrix 2
         [[46],
          [77],
          [15]],
         # matrix 3
         [[68],
          [14],
          [49]]],

# 3d tensor
        [
         # matrix 1
         [[80],
          [36],
          [60]],
         # matrix 2
         [[91],
          [00],
          [22]],
         # matrix 3
         [[71],
          [81],
          [90]]]])

Y
# 4d tensor
tensor([
# 3d tensor
        [
         # matrix 1 
         [[63],
          [64],
          [57]],
         # matrix 2
         [[37],
          [20],
          [51]],
         # matrix 3
         [[04],
          [08],
          [06]]],

# 3d tensor
        [
         # matrix 1
         [[05],
          [86],
          [10]],
         # matrix 2
         [[51],
          [16],
          [12]],
         # matrix 3
         [[60],
          [26],
          [15]]]])

加法

加法、减法和哈达玛积仍然按预期按元素执行。

X + Y

tensor([[[[ 7,  7],
          [15,  6],
          [ 8,  7]],

         [[ 713],
          [ 9,  7],
          [ 6,  6]],

         [[ 612],
          [ 112],
          [ 415]]],


        [[[ 8,  5],
          [1112],
          [ 7,  0]],

         [[14,  2],
          [ 1,  6],
          [ 3,  4]],

         [[13,  1],
          [10,  7],
          [10,  5]]]])

减法

X - Y

tensor([[[[-5,  1],
          [ 3-2],
          [-2-7]],

         [[ 1-1],
          [ 5,  7],
          [-4,  4]],

         [[ 6,  4],
          [ 1-4],
          [ 4,  3]]],


        [[[ 8-5],
          [-5,  0],
          [ 5,  0]],

         [[ 4,  0],
          [-1-6],
          [ 1,  0]],

         [[ 1,  1],
          [ 6-5],
          [ 8-5]]]])

点积

深度学习:张量 介绍,深度学习

在四维中,张量乘法将具有与三维和二维中相同的要求。它还需要第一轴和第二轴与两个张量匹配:

  • (c、z、m、n) x (c、z、n、r) = (c、z、m、r)

在三维空间中,进行矩阵乘法,然后进行向量之间的点积。相同的步骤将在四个维度中发生,但首先将每个 3D 张量与其相应的 3D 张量相乘。然后,它们的每个矩阵将相互相乘。最后,它们的向量将相互执行点积。这可以在上图中看到。

对于本例, 和 的大小为 (2, 3, 3, 2)。为了进行乘法运算,必须调换 的第三轴和第四轴。这可以按照与之前使用 Y.permute(0, 1, 3, 2) 或 Y.transpose(2,3) 相同的方式完成。转置后的形状为 (2, 3, 2, 3)。

结果的形状应为 (2, 3, 3, 2) x (2, 3, 2, 3) = (2,3,3,3)。这意味着将有两个 3D 张量,每个张量将包含三个 (3,3) 矩阵。这个结果可以使用 matmul 或 @ 获得。

X.matmul(Y.transpose(2,3)) # X @ Y.transpose(2,3)

tensor([[[[182233],
          [606259],
          [181815]],

         [[54,  826],
          [701442],
          [38,  210]],

         [[326448],
          [163224],
          [367254]]],


        [[[ 064,  8],
          [3060,  3],
          [ 048,  6]],

         [[461511],
          [ 0,  0,  0],
          [1214,  6]],

         [[422012],
          [482213],
          [5418,  9]]]])

Hadamard 积

X * Y

tensor([[[[ 612],
          [54,  8],
          [15,  0]],

         [[1242],
          [14,  0],
          [ 5,  5]],

         [[ 032],
          [ 032],
          [ 054]]],


        [[[ 0,  0],
          [2436],
          [ 6,  0]],

         [[45,  1],
          [ 0,  0],
          [ 2,  4]],

         [[42,  0],
          [16,  6],
          [ 9,  0]]]])

标量乘法

k = 5
k * X

tensor([[[[ 520],
          [4510],
          [15,  0]],

         [[2030],
          [3535],
          [ 525]],

         [[3040],
          [ 520],
          [2045]]],


        [[[40,  0],
          [1530],
          [30,  0]],

         [[45,  5],
          [ 0,  0],
          [1010]],

         [[35,  5],
          [40,  5],
          [45,  0]]]])

Reference

[1]

Source: https://medium.com/@hunter-j-phillips/a-simple-introduction-to-tensors-c4a8321efffc

本文由 mdnice 多平台发布文章来源地址https://www.toymoban.com/news/detail-719028.html

到了这里,关于深度学习:张量 介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习中标量,向量,矩阵和张量

    1.标量(Scalar) 只有大小没有方向,可用实数表示的一个量 2.向量(Vector) 可以表示大小和方向的量 3.矩阵(Matrix) m行n列,矩阵中的元素可以是数字也可以是符号,在深度学习中一般是二维数组 4.张量(Tensor) 用来表示一些向量、标量和其他张量之间的线性关系的多线性函数,这些线

    2024年02月15日
    浏览(43)
  • 深度学习 pytorch的使用(张量1)

     tensor(10) tensor([[-1.0923, -0.0842,  1.5959],         [ 0.4562,  1.0242,  0.0691]], dtype=torch.float64) tensor([[10., 20., 30.],         [40., 50., 60.]]) --------------------------------------------------  tensor([[-1.4189e-09,  1.7614e-42,  0.0000e+00],         [ 0.0000e+00,  0.0000e+00,  0.0000e+00]]) tensor([10.]) tensor([10., 20

    2024年01月22日
    浏览(39)
  • 【深度学习】pytorch——Tensor(张量)详解

    笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ Tensor,又名张量。它可以是一个数(标量)、一维数组(向量)、二维数组(矩阵)和更高维的数组(高阶数据)。Tensor和Numpy的ndarrays类似,但PyTorch的tensor支持GPU加速。 官方文档 : https://pytorch.org/docs/stable/tensors.html

    2024年02月06日
    浏览(49)
  • 深度学习基础之《TensorFlow框架(6)—张量》

    一、张量 1、什么是张量 张量Tensor和ndarray是有联系的,当我们print()打印值的时候,它返回的就是ndarray对象 TensorFlow的张量就是一个n维数组,类型为tf.Tensor。Tensor具有以下两个重要的属性: (1)type:数据类型 (2)shape:形状(阶) 2、张量的类型 张量,在计算机当中如何存

    2024年02月21日
    浏览(35)
  • 【深度学习】S1 预备知识 P1 张量

    张量(Tensor)是深度学习中用于表示和处理多维数据的数据结构。张量与 Numpy 类似,但是不同的是深度学习框架专门为张量提供了丰富的操作API,包括创建张量、数据转换、数学运算、索引和切片等,使张量可以使用 GPU 加速,大大提高处理大量数据时的计算速度;同时提供

    2024年02月21日
    浏览(32)
  • 深度学习标量、向量、矩阵、张量之间的区别与联系

    前言 深度学习 的表现之所以能够超过传统的机器学习算法离不开神经网络,然而神经网络最基本的数据结构就是 向量 和 矩阵 , 神经网络 的输入是向量,然后通过每个矩阵对向量进行线性变换,再经过激活函数的非线性变换,通过层层计算最终使得 损失函数的最小化 ,完

    2024年02月16日
    浏览(37)
  • 现代C++中的从头开始深度学习【2/8】:张量编程

            初学者文本 :此文本需要入门级编程背景和对机器学习的基本了解。 张量是在深度学习算法中表示数据的主要方式。它们广泛用于在算法执行期间实现输入、输出、参数和内部状态。         在这个故事中,我们将学习如何使用特征张量 API 来开发我们的C+

    2024年02月13日
    浏览(36)
  • 【PyTorch与深度学习】2、PyTorch张量的运算API(上)

    课程地址 最近做实验发现自己还是基础框架上掌握得不好,于是开始重学一遍PyTorch框架,这个是课程笔记,这个课还是讲的简略,我半小时的课听了一个半小时。 (1) chunk :将一个张量分割为特定数目的张量,每个块都是输入张量的视图。 按维度0分割: 运行结果: b=

    2024年04月29日
    浏览(46)
  • 基于深度学习方法与张量方法的图像去噪相关研究

    目录 1 研究现状 1.1 基于张量分解的高光谱图像去噪 1.2 基于深度学习的图像去噪算法 1.3 基于深度学习的高光谱去噪 1.4 小结 2 基于深度学习的图像去噪算法 2.1 深度神经网络基本知识 2.2 基于深度学习的图像去噪网络 2.3 稀疏编码 2.3.1 传统稀疏编码 2.3.2 群稀疏编码  2.3.3 卷积

    2024年02月16日
    浏览(46)
  • (六)人工智能应用--深度学习原理与实战--理解张量与运算图

    Tensorflow名称中的Tensor即张量,不仅仅是Tensorflow,几乎所有的深度学习平台都以张量为基本的数据结构。简单来说,张量就是多维数组,本质上是一种数据容器,它可以有任意维度,比如矩阵就是二维张量(二维数组)。 深度学习中使用张量来表示数据,计算图是由张量和张量

    2024年02月15日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包