今天,在学习范数求解的章节时发现一个问题,用视频中范数求解的语法规则输入后会出现RuntimeError: norm(): input dtype should be either floating point or complex dtypes. Got Long instead. 这样的错误提示,下面提供解决办法。
我搜索了一些资料后发现很多中求解语法,一一试验后都不正确,在查询了系统注释后明白是语法规则发生了变化。
如下面类定义所示:
其参数包括: input, p, dim, keepdim, out, dtype 。
input:输入张量。它的数据类型必须是浮点型或复数型。对于复数的输入,范数使用每个元素的绝对值。注意,输入张量中元素的数据类型一定得是浮点型或者是复数哦,不然就会报错!这个就是主要变化,其次是不能使用 input.norm
p:范数的阶数。默认是2阶—“fro”,也就是弗罗贝尼乌斯范数(Frobenius norm)。如果输入p=某个正整数,则求解对应的p阶范数。其公式为 sum(abs(x)**p)**(1./p)。
dim:对输入的张量计算其指定维度(如dim=1,则表示计算第二个维度)上所有元素的范数。如果不对dim进行赋值,则会计算输入张量所有维度上的范数。当然如果指定维数不在输入张量的尺寸之内,将出现错误。
示例:
>>> import torch
>>> a = torch.arange(9, dtype= torch.float) – 4
>>> b = a.reshape((3, 3))
>>> torch.norm(a)
tensor(7.7460)
>>> torch.norm(b)
tensor(7.7460)
也可以:
>>>a.norm()
tensor(7.7460)
希望能帮助和我一样被困扰的你。