深度学习基础知识(三)-线性代数的实现

这篇具有很好参考价值的文章主要介绍了深度学习基础知识(三)-线性代数的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.标量使用

标量由只有一个元素的张量表示,标量可以做最简单的计算。

import torch 
x=torch.tensor([3.0])
y=torch.tensor([2.0])

print(x+y)
print(x*y)
print(x/y)
print(x**y)

结果:

tensor([5.])
tensor([6.])
tensor([1.5000])
tensor([9.])

2.向量使用

向量:将标量值组成的列表就是向量

x=torch.arange(4)
print(x)
# 取向量中的元素
print(x[3])

结果:

tensor([0, 1, 2, 3])
tensor(3)

访问张量的长度

print(len(x))
# 结果为4

只有一个轴的张量,形状只有一个元素

print(x.shape)
# 结果为:torch.Size([4])

创建一个二维矩阵5行4列,然后将矩阵做转置,轴对称的一个转置

a=torch.arange(20).reshape(5,4)
print(a)

# 矩阵的转置
print(a.T)

结果:其实就是把每一列转换成行

tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19]])
tensor([[ 0,  4,  8, 12, 16],
        [ 1,  5,  9, 13, 17],
        [ 2,  6, 10, 14, 18],
        [ 3,  7, 11, 15, 19]])

3.矩阵使用

对称矩阵:它的转置等于自己,你可以注意数据里数值,就可以明白为什么是对称的了

b=torch.tensor([[1,2,3],[2,0,4],[3,4,5]])
print(b)
print("b的转置:",b.T)
print("转置后元素是否相等:",b==b.T)

结果: 

tensor([[1, 2, 3],
        [2, 0, 4],
        [3, 4, 5]])
b的转置: tensor([[1, 2, 3],
        [2, 0, 4],
        [3, 4, 5]])
转置后元素是否相等: tensor([[True, True, True],
        [True, True, True],
        [True, True, True]])

就像向量是标量的推广,矩阵是向量的推广一样,我们可以构建具有更多轴的数据结构。

x=torch.arange(24).reshape(2,3,4)
print(x)

结果:分别有两个二维,三行,四列的维度

tensor([[[ 0,  1,  2,  3],
         [ 4,  5,  6,  7],
         [ 8,  9, 10, 11]],

        [[12, 13, 14, 15],
         [16, 17, 18, 19],
         [20, 21, 22, 23]]])

两个矩阵按元素乘法称为哈达玛积(数学符号⊙)。

a=torch.arange(20).reshape(5,4)
b=a.clone()# 重新分配内存,将A的副本分配给b
print("a:",a)
print("b:",b)

# 按元素乘法,哈达玛积
print("哈达玛积:",a*b)

# 也可以标量乘以或与矩阵相加
h=2
x=torch.arange(24).reshape(2,3,4)
print("h+x:",h+x)
print("x*a.shape:",(h*x).shape)

结果:

a: tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19]])
b: tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19]])
哈达玛积: tensor([[  0,   1,   4,   9],
        [ 16,  25,  36,  49],
        [ 64,  81, 100, 121],
        [144, 169, 196, 225],
        [256, 289, 324, 361]])
h+x: tensor([[[ 2,  3,  4,  5],
         [ 6,  7,  8,  9],
         [10, 11, 12, 13]],

        [[14, 15, 16, 17],
         [18, 19, 20, 21],
         [22, 23, 24, 25]]])
x*a.shape: torch.Size([2, 3, 4])

指定求和汇总张量的轴

# 按维度的列求和
a_sumaxis0=a.sum(axis=0)
print(a_sumaxis0)

# 按维度的行求和
a_sumaxis1=a.sum(axis=1)
print(a_sumaxis1)

结果:

a原来的值: tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19]])

tensor([40, 45, 50, 55])  # 按列求的和
tensor([ 6, 22, 38, 54, 70]) # 按行求的和

一个与求和相关的量是平均值(mean或average),也可以指定按某个维度处理

print(a.sum())
# 满足条件的元素个数
print(a.numel())

# 求平均值,也等于a.mean()
print(a.sum()/a.numel())

# 按维度进行求平均值
print(a.mean(axis=0,dtype=torch.float32))
# 与上一个结果相等,方式不同
print(a.sum(axis=0)/ a.shape[0])

 结果:

tensor(190)
20
tensor(9.5000)
tensor([ 8.,  9., 10., 11.])
tensor([ 8.,  9., 10., 11.])

计算总和和均值时保持轴数不变

# 按行求和
sum_a=a.sum(axis=1,keepdims=True)
print(sum_a)
print(a)

# 通过广播将a/sum_a
print(a/sum_a)

某个轴计算a元素的累积总和

print(a.cumsum(axis=0))

结果:

tensor([[ 0,  1,  2,  3],
        [ 4,  6,  8, 10],
        [12, 15, 18, 21],
        [24, 28, 32, 36],
        [40, 45, 50, 55]])

点积:只能支持两个一维向量,是相同位置的按元素乘积的和

y=torch.ones(4,dtype=torch.float32)
x=torch.arange(4,dtype=torch.float32)
print(y)

print(x)

# 点积也等价于torch.sum(x*y)
print(torch.dot(x,y))

结果:

tensor([1., 1., 1., 1.])
tensor([0., 1., 2., 3.])
tensor(6.)

矩阵向量乘法:只支持矩阵向量乘法,如果input为 n × m n\times m n×m的,vec向量的长度为m,那么输出为 n × 1的向量。

from numpy.core.multiarray import dtype
print(a)
print(a.shape)
x=torch.arange(4)
print(x)
print(x.shape)
# 矩阵向量乘法,
print(torch.mv(a,x))

结果:

tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19]])
torch.Size([5, 4])
tensor([0, 1, 2, 3])
torch.Size([4])
tensor([ 14,  38,  62,  86, 110])

两个矩阵做乘法:对矩阵input 和mat2进行相乘。 如果input 是一个n×m张量,mat2 是一个 m×p张量,将会输出一个 n×p张量out。
torch.mm()不支持广播机制

mat1=torch.arange(12).reshape(3,4)
mat2=torch.arange(12).reshape(4,3)
print(mat1)
print(mat2)
print(torch.mm(mat1,mat2))

结果:

tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])
tensor([[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8],
        [ 9, 10, 11]])
tensor([[ 42,  48,  54],
        [114, 136, 158],
        [186, 224, 262]])

L2范数:是向量元素平方和的平方根。

u=torch.tensor([3.0,-4.0])
print(torch.norm(u))

结果:

tensor(5.)

L1范数:表示为向量元素的绝对值之和:

u=torch.tensor([3.0,-4.0])
print(torch.norm(u))

结果:

tensor(7.)

f范数矩阵:是矩阵元素的平方和的平方根。

print(torch.norm(torch.ones(4,9)))
#结果为:tensor(6.)

李沐老师的深度学习课学习笔记内容!希望对你有帮助文章来源地址https://www.toymoban.com/news/detail-688692.html

到了这里,关于深度学习基础知识(三)-线性代数的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 轻松掌握线性代数-万字长文基础知识概览

    线性代数是一门将 m 维世界与 n 维世界联系起来的学科 映射:把集合 Y 的元素与集合 X 的元素相对应的规则叫做 “从集合 X 到集合 Y 的映射”。 像:通过映射 f 与 x i 相对应的集合 Y 的元素,叫做 x i 通过映射 f 形成的像,一般表示为 f(x i )。 线性映射的例子 f ( x ) = 2 x f(

    2024年02月11日
    浏览(83)
  • 深度学习-必备的数学知识-线性代数6

    线性代数 通过伪逆求解线性方程组 伪逆,又称为Moore-Penrose逆,它是一种广义的矩阵。我们可以找到任意一个矩阵的伪逆。矩阵 A mathbf{A} A 的伪逆定义为: A + = lim ⁡ x → 0 ( A T A + α I ) − 1 A T mathbf{A}^+=lim_{x to 0}(mathbf{A}^Tmathbf{A}+alphamathbf{I})^{-1}mathbf{A}^T A + = x → 0 lim ​

    2024年01月18日
    浏览(59)
  • 深度学习-必备的数学知识-线性代数(合集)

    为方便大家阅读,这里推出一个线性代数的合集。这与之前的内容是一致的。 我们在深度学习-简介和 深度学习-历史背景中已经初步了解的深度学习。在我们开始学习深度学习前还需要做些准备工作。就是学习应用数学和机器学习基础。 想要理解深度学习这些是必不可少的

    2024年02月03日
    浏览(57)
  • 深度学习-必备的数学知识-线性代数-1

    我们在深度学习-简介和 深度学习-历史背景中已经初步了解的深度学习。在我们真正开始学习深度学习前还需要做些准备工作。那就是学习应用数学和机器学习基础。想要理解深度学习这些是必不可少的。 我将在这篇文章中为大家介绍一部分与深度学习有关的线性代数。 我

    2024年02月05日
    浏览(50)
  • 深度学习-必备的数学知识-线性代数5

    线性代数 在数学中,分解通常指的是将一个复杂的对象或结构分解为更简单的部件或组件。这个概念在许多数学领域都有应用。在线性代数中,矩阵分解是常见的一个主题,我们通过分解矩阵来发现它不明显的性质。 矩阵有许多种的分解方式:LU分解、QR分解、特征分解、奇

    2024年02月02日
    浏览(72)
  • 李沐 《动手学深度学习》预备知识 线性代数与微积分

    李沐《动手学深度学习》预备知识 张量操作与数据处理 教材:李沐《动手学深度学习》 标量(scalar) 仅包含一个数值被称为标量,标量由只有一个元素的张量表示。 向量 向量可以被视为标量值组成的列表,向量由一维张量表示。一般来说,张量可以具有任意长度,取决于

    2024年01月20日
    浏览(66)
  • 深度学习需要掌握的数学知识②【线性代数-part2】

    1.克莱姆法则 线性方程组 { a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ a n 1 x 1 + a n 2 x 2 + ⋯ + a n n x n = b n begin{cases} a_{11}x_{1} + a_{12}x_{2} + cdots +a_{1n}x_{n} = b_{1} \\\\ a_{21}x_{1} + a_{22}x_{2} + cdots + a_{2n}x_{n} =b_{2} \\\\ quadcdotscdotscd

    2024年02月16日
    浏览(52)
  • 深度学习的数学基础:从线性代数到随机过程

    深度学习是人工智能领域的一个重要分支,它主要通过模拟人类大脑中的神经网络来进行数据处理和学习。深度学习的核心技术是神经网络,神经网络由多个节点组成,这些节点之间有权重和偏置的连接。通过对这些节点进行训练,我们可以使神经网络具有学习和推理的能力

    2024年03月18日
    浏览(91)
  • <2>【深度学习 × PyTorch】pandas | 数据预处理 | 处理缺失值:插值法 | networkx模块绘制知识图谱 | 线性代数初步

      你永远不可能真正的去了解一个人,除非你穿过ta的鞋子,走过ta走过的路,站在ta的角度思考问题,可当你真正走过ta走过的路时,你连路过都会觉得难过。有时候你所看到的,并非事实真相,你了解的,不过是浮在水面上的冰山一角。—————《杀死一只知更鸟》   🎯

    2024年02月01日
    浏览(48)
  • 深度学习笔记之线性代数

    一、向量 在数学表示法中,向量通常记为粗体小写的符号(例如, x , y , z )当向量表示数据集中的样本时,它们的值具有一定的现实意义。例如研究医院患者可能面临的心脏病发作风险,用一个向量表示一个患者,其分量为最近的生命特征、胆固醇水平、每天运动时间等

    2024年02月08日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包