用法介绍
pytorch中的torch.norm主要用于计算矩阵和向量的p pp范数,具体的用法如下所示:
torch.norm(input, p=‘fro’, dim=None, keepdim=False, out=None, dtype=None)
input (Tensor): 输入的张量,数据类型必须是浮点型或复杂输入。对于复杂输入,使用每个元素的绝对值计算范数。如果输入很复杂,并且未指定dtype或out,则结果的数据类型将是相应的浮点类型
p (int, float, inf, -inf, ‘fro’,‘nuc’, optional): 表示指定的范数,其中默认类型’fro’为Frobenius范数,'nuc’表示矩阵的核范数
dim (int, tuple of python:ints, list of python:ints, optional): 指定要计算范数的输入维度。如果dim为None,则将在输入的所有维度上计算范数。
keepdim (bool, optional): 输出的张量是否保持不变,默认值是False,如果dim = None和out = None,则该参数会被省略掉
out (Tensor, optional): 输出的张量,如果dim = None和out = None,则该参数会被省略掉
dtype (torch.dtype, optional): 返回的张量的所需数据类型。如果指定,则在执行操作时将输入张量转换为dtype。默认值是None
代码实例
在图像中会用到torch.norm函数来计算图像中L 2范数。给定一批图像X ∈ R(b × c × w × h),则该图像的L 2范数的定义为:
相关的代码实例如下所示
import torch
import torch
def l2_norm(input, p_, dim_, keepdim_):
norm = torch.norm(input, p=p_, dim=dim_, keepdim=keepdim_)
return norm
if __name__ == '__main__':
input = torch.rand(4,3,32,32)
print(l2_norm(input, 2, None, False).shape)
input = torch.rand(4,3,32,32)
print(l2_norm(input, 2, 1, True).shape)
则有如下程序
import torch
inputs = torch.rand(5, 1, 28, 28)
outputs_L0_norm = torch.norm(inputs, p=0, dim=(2,3), keepdim=True)
outputs_L2_norm = torch.norm(inputs, p=2, dim=(2,3), keepdim=True)
outputs = outputs_L0_norm / outputs_L2_norm * torch.ones(inputs.shape)
print(outputs)
原文链接:https://blog.csdn.net/qq_38406029/article/details/119003719