动手学深度学习——线性代数的实现
Posted 橙子吖21
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动手学深度学习——线性代数的实现相关的知识,希望对你有一定的参考价值。
"""
标量由只有一个元素的张量表示
"""
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))))
以上是关于动手学深度学习——线性代数的实现的主要内容,如果未能解决你的问题,请参考以下文章
《动手学深度学习》线性回归的简洁实现(linear-regression-pytorch)
线性回归 + 基础优化算法 动手学深度学习v2 pytorch
《动手学深度学习》线性回归从零开始(linear-regression-scratch)