torch之norm、normal、mean和std

一、norm

这个是计算范式

对应的公示是: 正常没有指定p的值的时候默认是2 如下所示

a = torch.arange(1, 6, dtype=torch.float32)
print(torch.norm(a)) # 这里p没有指定,则默认是2 
print(torch.norm(a, 1)) # 这里p指定为1
print(torch.norm(a, float('inf'))) # 这里p指定为inf即无穷大,表示的意思是取a中绝对值最大的项,并返回该绝对值项
上面的结果为:
tensor(7.4162)
tensor(15.)
tensor(5.)

如上所示,根据公式则得出最后指出的打印的结果

这里着重再举个例子说一下这个float('inf') 

b = torch.tensor([[1,2,3], [4,-7,6.]])
print(torch.norm(b, float('inf'))) # 因为是获取绝对值最大的,则该输出为:tensor(7.)

如果只是要获取最大值和最小值,则只需要b.max(), b.min() 即可获取到最大和最小值

 

二、normal

用于从给定的均值和标准差中生成指定大小的正态分布

该函数的参数包括:均值mean和标准差std,以及生成随机数的张量size

这里需要注意的是当mean和std均为标量的时候,才有必要传入size,否则无需传入size

1、当mean和std至少有一个是张量时候,不传入size

torch.manual_seed(0) #设置随机种子以保证结果可复现
mean = torch.zeros(3)
std = torch.ones(3)
print(torch.normal(mean, std)) # 显示1x3的正态分布数据
# 这里mean和std只要遵循广播机制即可,比如如下的mean和std也是可以的
torch.manual_seed(0) #设置
mean = torch.zeros(3)
std = torch.ones([4,3])
print(torch.normal(mean, std)) # 显示4x3的正态分布数据

2、mean和std均为标量,则需要传入size来获取正态分布数据的维度

print(torch.normal(0.2, 0.3, [5, 6])) # 显示5行6列的正态分布数据

 

三、mean

用于计算给定张量的均值

print(torch.tensor([[1,2.], [2,5]]).mean()) # 打印的结果为tensor(2.5000) 即(1+2+2+5)/4 = 2.5

 

四、std

用于计算给定张量的标准差

标准差的计算公式:σ = sqrt( ( (a1-v)^2 + (a2 - v)^2 + (a3 - v)^2 + ...+ (an-v)^2) / (n - 1) ) 这里v = (a1 + ... + an) / n

所以下面的计算结果可以根据后面的注释得到

print(torch.tensor([[1,2.], [2,5]]).std()) # sqrt((1^2 + 2^2 + 2^2 + 5^2) / (4 - 1)) = 1.7321

 

posted @ 2024-01-18 23:34  LCAC  阅读(388)  评论(0编辑  收藏  举报