一、什么是均值和标准差
先复习下数学。
给定几个数,如 5、6、8、9
1、均值
平均数,即 (5+6+8+9)/4=7
2、标准差
反映各个数与平均值的距离,标准差越大,说明越离散。标准差越小,说明大多数集中在平均值
标准差是平方差的开根号
标准差公式:每个数与平均数作差,然后再平方,求和,再取平均数,最后开根号
计算方差和标准差见下面举例说明
3、举例说明
根号2.5=1.5811
[5, 6, 8, 9]
均值是7,
标准差,计算公式: sqrt( (5-7)^2 + (6-7)^2 + (8-7)^2 + (9-7)^2) / 4 ) = 1.5811
方差,计算公式: ( (5-7)^2 + (6-7)^2 + (8-7)^2 + (9-7)^2 ) / 4 = 2.5
[0, 5, 9, 14]
均值是7,
标准差,计算公式: sqrt( ( (0-7)^2 + (5-7)^2 + (9-7)^2 + (14-7)^2 ) / 4 ) = 5.1235
方差,计算公式: ( (0-7)^2 + (5-7)^2 + (9-7)^2 + (14-7)^2) / 4 = 26.25
结论:[0, 5, 9, 14] 比 [5, 6, 8, 9] 的标准差大,数据的离散程度大
方差是各个数据与平均数的差,然后平方,再求和,再取平均数。方差越大,数据的离散程度越大
标准差是方差的开平方根。同样,标准差越大,数据的离散程度越大
二、torch.normal
代码 1
import torch
# mean 表示 均值
mean = 100
# std 表示 标准差。需要是张量
std = torch.tensor([10, 10, 10, 10, 10, 10], dtype=torch.float32)
# 分别遍历张量中每个数值,根据均值和标准差,生成一个张量
x = torch.normal(mean=mean, std=std)
print(x) # 最终生成的张量中的数值都是在均值(100)附近,且标准差为10
std如果不传,默认为1
mean和std都是可以为数值或者张量
如果mean和std都为张量,其元素个数要相同,因为最终求每个数是一一对应的,即根据第1个均值和第1个标准差获取一个随机数...
size=(3, 2)
代码2
import torch
# mean 和 std 的张量形状可以不一样,但是里面元素个数需要相同,因为是一一对应的
# mean 表示 均值
mean = torch.tensor([100, 100, 100, 100, 100, 100], dtype=torch.float32) # 等价于 mean = 100
# std 表示 标准差。需要是张量
std = torch.tensor([10, 10, 10, 10, 10, 10], dtype=torch.float32) # 等价于 std = 10
# 分别遍历张量中每个数值,根据均值和标准差,生成一个张量
x = torch.normal(mean=mean, std=std)
print(x) # 最终生成的张量中的数值都是在均值(100)附近,且标准差为10
代码3
import torch
# mean 表示 均值
mean = 100
# std 表示 标准差。需要是张量
std = 10
# 分别遍历张量中每个数值,根据均值和标准差,生成一个张量
x = torch.normal(mean=mean, std=std, size=(1, 6)) # 指定生成几个数值,1行6列
print(x) # 最终生成的张量中的数值都是在均值(100)附近,且标准差为10
以上三者代码等价
运行结果
tensor([101.4776, 95.4836, 102.7950, 100.5145, 96.3130, 82.8951])
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏