基于PyTorch的深度学习2——逐元素操作,归并,比较,矩阵

以下为部分逐元素操作代码实例。

复制代码
import torch

t = torch.randn(1, 3)
t1 = torch.randn(3, 1)
t2 = torch.randn(1, 3)

#t+0.1*(t1/t2)
torch.addcdiv(t, 0.1, t1, t2)

#计算sigmoid
torch.sigmoid(t)

#将t限制在[0,1]之间
torch.clamp(t,0,1)

#t+2进行就地运算
t.add_(2)

归并操作一般涉及一个dim参数,指定沿哪个维进行归并。另一个参数是keepdim,说明输出结果中是否保留维度1,缺省情况是False,即不保留。以下为归并操作的部分代码

复制代码
import torch

#生成一个含6个数的向量
a=torch.linspace(0,10,6)

#使用view方法,把a变为2x3矩阵
a=a.view((2,3))

#沿y轴方向累加,即dim=0
b=a.sum(dim=0)   #b的形状为[3]

#沿y轴方向累加,即dim=0,并保留含1的维度
b=a.sum(dim=0,keepdim=True) #b的形状为[1,3]

机器学习和深度学习中存在大量的矩阵运算,常用的算法有两种:一种是逐元素乘法,另外一种是点积乘法

1)Torch的dot与Numpy的dot有点不同,Torch中的dot是对两个为1D张量进行点积运算,Numpy中的dot无此限制。

2)mm是对2D的矩阵进行点积,bmm对含batch的3D进行点积运算。

3)转置运算会导致存储空间不连续,需要调用contiguous方法转为连续。

torch.dottorch.mmtorch.bmm

1. 使用 torch.dot

torch.dot 计算两个一维张量(向量)的点积。

复制代码
import torch

a = torch.tensor([2, 3])
b = torch.tensor([3, 4])

result_dot = torch.dot(a, b)  # 运行结果为 2*3 + 3*4 = 6 + 12 = 18
print("Dot product result:", result_dot)

解释: 点积是对应元素相乘后的和,即 2×3+3×4=6+12=182×3+3×4=6+12=18。

2. 使用 torch.mm

torch.mm 执行两个二维张量(矩阵)之间的矩阵乘法。

复制代码
x = torch.randint(10, (2, 3))  # 创建一个形状为 (2, 3) 的随机整数张量
y = torch.randint(6, (3, 4))   # 创建一个形状为 (3, 4) 的随机整数张量

result_mm = torch.mm(x, y)  # 形状为 (2, 4) 的结果张量
print("Matrix multiplication result:\n", result_mm)

解释 : torch.mm 对两个二维张量执行标准的矩阵乘法。给定 XX 是 2×32×3 的矩阵,YY 是 3×43×4 的矩阵,则结果是一个 2×42×4 的矩阵。

示例输出

复制代码
x = tensor([[7, 8, 9],
            [5, 6, 7]])
y = tensor([[4, 3, 2, 1],
            [0, 1, 2, 3],
            [4, 3, 2, 1]])

tensor([[64, 54, 44, 34],
        [48, 40, 32, 24]])

3. 使用 torch.bmm

torch.bmm 执行批量矩阵乘法,适用于三维张量,其中每个二维子张量(切片)都进行矩阵乘法。

复制代码
x = torch.randint(10, (2, 2, 3))  # 创建一个形状为 (2, 2, 3) 的随机整数张量
y = torch.randint(6, (2, 3, 4))   # 创建一个形状为 (2, 3, 4) 的随机整数张量

result_bmm = torch.bmm(x, y)  # 形状为 (2, 2, 4) 的结果张量
print("Batch matrix multiplication result:\n", result_bmm)

解释 : torch.bmm 针对三维张量中的每一对二维子张量执行矩阵乘法。对于形状为 (batch_size, m, n)(batch_size, n, p) 的输入张量,输出将是形状为 (batch_size, m, p) 的张量。

示例输出

假设 xy 分别是:

复制代码
x = tensor([[[7, 8, 9],
             [5, 6, 7]],

            [[1, 2, 3],
             [4, 5, 6]]])

y = tensor([[[4, 3, 2, 1],
             [0, 1, 2, 3],
             [4, 3, 2, 1]],

            [[1, 2, 3, 4],
             [5, 6, 7, 8],
             [9, 10, 11, 12]]])

result_bmm 可能是:

复制代码
tensor([[[64, 54, 44, 34],
         [48, 40, 32, 24]],

        [[38, 44, 50, 56],
         [86, 98, 110, 122]]])

总结

  • torch.dot:用于计算两个一维张量的点积。
  • torch.mm:用于计算两个二维张量的标准矩阵乘法。
  • torch.bmm:用于计算两个三维张量中对应的二维子张量之间的批量矩阵乘法。
相关推荐
Allen_LVyingbo21 分钟前
数智读书笔记系列035《未来医疗:医疗4.0引领第四次医疗产业变革》
人工智能·经验分享·笔记·健康医疗
zzc92127 分钟前
时频图数据集更正程序,去除坐标轴白边及调整对应的标签值
人工智能·深度学习·数据集·标签·时频图·更正·白边
isNotNullX28 分钟前
什么是数据分析?常见方法全解析
大数据·数据库·数据仓库·人工智能·数据分析
riveting37 分钟前
明远智睿H618:开启多场景智慧生活新时代
人工智能·嵌入式硬件·智能硬件·lga封装·3506
夜阑卧听风吹雨,铁马冰河入梦来1 小时前
Spring AI 阿里巴巴学习
人工智能·学习·spring
c7691 小时前
【文献笔记】Automatic Chain of Thought Prompting in Large Language Models
人工智能·笔记·语言模型·论文笔记
Blossom.1182 小时前
机器学习在智能供应链中的应用:需求预测与物流优化
人工智能·深度学习·神经网络·机器学习·计算机视觉·机器人·语音识别
Gyoku Mint2 小时前
深度学习×第4卷:Pytorch实战——她第一次用张量去拟合你的轨迹
人工智能·pytorch·python·深度学习·神经网络·算法·聚类
zzywxc7872 小时前
AI大模型的技术演进、流程重构、行业影响三个维度的系统性分析
人工智能·重构
点控云2 小时前
智能私域运营中枢:从客户视角看 SCRM 的体验革新与价值重构
大数据·人工智能·科技·重构·外呼系统·呼叫中心