动手学深度学习2.3线性代数练习

Posted piolet0016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动手学深度学习2.3线性代数练习相关的知识,希望对你有一定的参考价值。

矩阵转置常用知识点

3. 给定任意方阵A,A + A⊤总是对称的吗?为什么?

4. 本节中定义了形状(2; 3; 4)的张量X。len(X)的输出结果是什么?

 返回的是axis = 0的值的大小

5、对于任意形状的张量X,len(X)是否总是对应于X特定轴的⻓度?这个轴是什么?

 

实验可知对应轴axis = 0

6. 运行A/A.sum(axis=1),看看会发生什么。请分析一下原因?

 

 直接求和会使A降维,不同维度的矩阵之间是不能相乘除的,如果加上keepdims = True就没问题

 

 7. 考虑一个具有形状(2; 3; 4)的张量,在轴0、1、2上的求和输出是什么形状?

相应求和维度消失

 8. 为linalg.norm函数提供3个或更多轴的张量,并观察其输出。对于任意形状的张量这个函数计算得到 什么?

 ord = 1是求L1范数,这里是为了便于演示

 dim = 0的L1就是求dim = 0的和,其余同理

 

 

动手学深度学习——线性代数的实现

"""
标量由只有一个元素的张量表示
"""
import torch
x=torch.tensor([3.0])
y=torch.tensor([2.0])
print(x+y)
print(x*y)
print(x/y)
print(x**y)
"""
你可以将向量视为标量值组成的列表
"""
x=torch.arange(4)
print(x)
"""
通过张量的索引来访问任一元素
"""
print(x[3])
"""
访问张量的长度
"""
print(len(x))
"""
只有一个轴的张量,形状只有一个元素
"""
print(x.shape)

 

"""
通过指定的两个分量m和n来创建一个形状为mxn的矩阵
"""
A=torch.arange(20).reshape(5,4)
print(A)
"""
矩阵的转置
"""
print(A.T)
"""
对称矩阵A等于其转置矩阵
"""
B=torch.tensor([[1,2,3],[2,0,4],[3,4,5]])
print(B)
print(B==B.T)

"""
就像向量是标量的推广,矩阵是向量的推广一样,我们可以构建具有更多轴的数据结构
"""
X=torch.arange(24).reshape(2,3,4)
print(X)
"""
给定任何相同形状的任何两个张量,任何按元素二元运算的结果都将是相同形状的张量
"""
A=torch.arange(20,dtype=torch.float32).reshape(5,4)
B=A.clone() #通过分配新内存,将A的一个副本分配给B
print(A)
print(A+B)

 

 

"""
两个矩阵的按元素乘法称为 哈达玛积
"""
print(A*B)

a=2
X=torch.arange(24).reshape(2,3,4)
print(a+X)
print((a*X).shape)
"""
计算其元素的和
"""
x=torch.arange(4,dtype=torch.float32)
print(x)
print(x.sum())
"""
表示任意形状张量的元素和
"""
A=torch.arange(20*2).reshape(2,5,4)
print(A.shape)
print(A.sum())
"""
指定求和汇总张量的轴
"""
A_sum_axis0=A.sum(axis=0)
print(A_sum_axis0)
print(A_sum_axis0.shape)

A_sum_axis1=A.sum(axis=1)
print(A_sum_axis1)
print(A_sum_axis1.shape)

print(A.sum(axis=[0,1]).shape)

"""
计算总和或均值时保持不变
"""
sum_A=A.sum(axis=1,keepdims=True)
print(sum_A)
"""
通过广播将A除以sum_A
"""
print(A/sum_A)

"""
某个轴计算A元素的累计总和
"""
print(A.cumsum(axis=0))
"""
点积是相同位置的按元素乘积的和
"""
x=torch.arange(4,dtype=torch.float32)
y=torch.ones(4,dtype=torch.float32)
print(x)
print(y)
print(torch.dot(x,y)) # x,y求点积
"""
我们可以通过执行按元素乘法,然后进行求和来表示两个向量的点积
"""
print(torch.sum(x*y))

 

"""
范数是向量元素平方和的平方根(L2范数)
"""
u=torch.tensor([3.0,-4.0])
print(torch.norm(u))
"""
L1范数它表示为向量元素的绝对值之和
"""
print(torch.abs(u).sum())
"""
矩阵的弗罗贝尼乌斯范数是矩阵元素的平方和的平方根
"""
print(torch.norm(torch.ones((4,9))))

 

 

以上是关于动手学深度学习2.3线性代数练习的主要内容,如果未能解决你的问题,请参考以下文章

3.1 线性回归 解析解动手学深度学习 v2

3.1 线性回归 解析解动手学深度学习 v2

线性代数 动手学深度学习 pytorch

动手学深度学习v2学习笔记02:线性代数矩阵计算自动求导

《动手学深度学习》线性回归(PyTorch版)

《动手学习深度学习》笔记:基础知识(概率论,线性代数)