【实验记录】pytorch函数整理

1. normalize()

feat_q = F.normalize(feat_q, dim=-1, p=1)

F.normalize(input, dim=-1, p=2)

  • F 是 PyTorch 中的函数模块,通常用于包含各种各样的神经网络相关操作。
  • normalize 函数用于对输入张量进行标准化,使其具有指定的范数(norm)。在这里,input 表示输入张量,dim 表示标准化操作应该沿着哪个维度进行,p 表示所使用的范数。
  • dim 参数用于指定标准化操作应该应用在哪个维度上。在这里,dim=-1 表示沿着最后一个维度进行标准化,通常是特征维度。
  • p 参数表示要使用的范数类型。在这里,p=1 表示使用 L1 范数(绝对值之和)进行标准化。其他常见的选项包括 p=2(L2 范数,欧几里德距离)等。

具体用法:

feat_q 是输入的特征张量,通过 F.normalize 函数,将其沿着最后一个维度(通常是特征维度)进行 L1 范数标准化。这意味着每个样本的特征向量将被缩放,使其 L1 范数等于1。这种标准化操作通常用于确保特征向量的数值范围不会对模型的训练产生不良影响,同时有助于提高模型的收敛性和稳定性。

2. permute()

feat_q = feat_q.view(batch_size, dim, -1).permute(0, 2, 1)

feat_q.view(batch_size, dim, -1)

  • feat_q 是一个三维张量,通过这个操作,将其重新视图为一个三维张量。
  • batch_size 表示批次大小,dim 表示特征维度,-1 表示将剩余的维度自动计算得出,以保持数据总量不变。
  • 这个操作的目的是将特征张量重新排列为一个新的形状,其中第一个维度是批次大小,第二个维度是剩余维度的乘积。

本函数较为抽象,需要配合图示理解

pytorch中permute()函数用法实例详解

3.view()

view()函数用于改变张量的形状(维度)。

主要用法是将一个张量重新排列成一个具有不同形状的新张量,而不会改变原始张量的数据。

new_tensor = original_tensor.view(new_shape)

其中:

  • original_tensor 是要改变形状的原始张量。
  • new_shape 是一个元组,指定了新的形状,即张量的各个维度的大小。

需要注意以下几点:

  1. 新形状的维度大小必须与原始张量中的元素数量相匹配。换句话说,original_tensor.numel()(原始张量的元素数量)必须等于新形状中各个维度大小的乘积。
  2. 如果在view()函数中某个维度指定为-1,PyTorch会自动计算该维度的大小,以确保总元素数量不变。

4.detach()

detach() 是 PyTorch 中的张量方法,用于创建一个新的张量,该张量与原始张量共享相同的数据,但不再追踪计算图中的梯度信息。换句话说,通过 detach() 方法生成的张量将不再与计算梯度相关联,它变成了一个不可训练的张量。

用法:

  • 在给定的代码中,feat_k 是一个张量,通过 feat_k.detach() 的调用,创建了一个新的张量 feat_k,该张量与原始 feat_k 具有相同的数据,但不再与梯度计算相关。
import torch

# 创建一个可训练的张量
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)

# 使用detach()创建一个不可训练的张量
y = x.detach()

# 修改y不会影响x,因为y不再与梯度计算相关
y[0] = 0.0

# 输出x和y的值
print(x)  # 输出: tensor([1., 2., 3.], requires_grad=True)
print(y)  # 输出: tensor([0., 2., 3.])

5.bmm()

torch.bmm(input1, input2)

  • torch.bmm 是 PyTorch 中的批量矩阵乘法函数,用于计算两个批次的矩阵相乘。
  • input1input2 是两个输入张量,它们的形状必须满足一定的规则以进行批量矩阵乘法。
  • 返回值是两个输入张量的批次矩阵乘法的结果。

6.reshape()

.reshape(shape)

  • reshape() 是 PyTorch 中用于改变张量形状的函数,它会返回一个具有新形状的张量,而不改变原始张量的数据。
  • shape 是一个元组,指定了新的形状,即张量的各个维度的大小。在这里,-1 表示由函数自动计算,以确保总元素数量不变。

7.eye()

torch.eye(n, m=None, out=None, *, dtype=None, layout=torch.strided, device=None, requires_grad=False)

  • torch.eye() 是 PyTorch 中用于创建单位矩阵(对角线上的元素为1,其他元素为0)的函数。
  • n 是单位矩阵的行数,m 是单位矩阵的列数。如果不指定 m,则默认为 n,创建一个正方形的单位矩阵。
  • out 可以用于指定结果的输出张量,如果不指定,则创建一个新的张量。
  • dtype 用于指定结果张量的数据类型。
  • layoutdevice 用于指定张量的布局和设备。
  • requires_grad 用于指定是否需要计算梯度。
  • 返回一个单位矩阵张量。
diagonal = torch.eye(npatches, device=feat_q.device, dtype=self.mask_dtype)[None, :, :]

其中,[None, :, :]

  • 这部分代码是通过索引和切片操作对创建的单位矩阵进行进一步处理。
  • None 表示在张量的第一个维度(通常是批次维度)插入一个新的维度,将原始的单位矩阵扩展为一个批次的单位矩阵。
  • [:, :] 表示对结果进行切片操作,保持所有的行和列。

具体用法:

  • 代码的目的是创建一个单位矩阵(对角线上的元素为1,其他元素为0),并将其扩展为一个批次的单位矩阵。
  • npatches 表示单位矩阵的行数和列数,它是从变量 feat_q 中获取的。
  • device=feat_q.device 指定了结果张量的设备,与 feat_q 相同的设备。
  • dtype=self.mask_dtype 指定了结果张量的数据类型,通常是布尔类型(用于创建一个布尔单位矩阵)。

8. masked_fill_()

masked_fill_(mask, value)

  • masked_fill_ 是 PyTorch 中的张量方法,用于基于掩码(mask)填充张量的特定元素。
  • mask 是一个与目标张量具有相同形状的布尔类型张量,它指定了哪些元素需要被填充。
  • value 是要用于填充的标量值。
  • 此方法将目标张量中满足掩码条件的元素用指定的值进行替换,同时保持其他元素不变。
  • 下划线(_)表示这个方法会对原始张量进行就地修改。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1ce2ou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值