Pytorch常用数学与统计学函数

Pytorch中常用的数学函数,包括三角函数、绝对值函数、sign()函数、误差函数等;还有一些统计学相关函数,包括histc()函数、bincount()函数等。

Pytorch中的数学函数

三角函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 余弦
torch.cos(input)
# 反余弦
torch.acos(input)
# 双曲余弦
torch.cosh(input)
# 正弦
torch.sin(input)
# 反正弦
torch.asin(input)
# 双曲正弦
torch.sinh(input)
# 正切
torch.tan(input)
# 反正切
torch.atan(input)
# input中元素代表坐标y,other中元素代表坐标x
# 返回向量(x,y)与向量(1,0)的夹角
torch.atan2(input, other)
# 双曲正切
torch.tanh(input)

其他数学函数

abs()函数与neg()函数

abs()函数取张量中每个元素的绝对值

1
torch.abs(input)

neg()函数取张量中每个元素的相反数

1
torch.neg(input)

sign()函数

1
torch.sign(input)
  • 当元素小于0返回-1;
  • 当元素等于0返回0;
  • 当元素大于0返回1;

即:

函数图像如下:

sigmoid()函数

1
torch.sigmoid(input)

通过sigmoid函数,可以将元素映射到0~1之间

sigmoid函数本质上是连续化的sign函数,可以解决sign函数的结果不连续而导致无法求导的问题。

  • 当元素趋于负无穷时,函数;
  • 当元素趋于正无穷时,函数值无限趋近于1;

即: 函数图像如下:

erf()erfc()函数

1
torch.erf(input)

函数是误差函数,是互补误差函数 函数图像如下:

红色曲线为误差函数,蓝色曲线为互补误差函数

erfinv()函数

1
torch.erfinv(input)

是逆误差函数

函数图像参考函数的图像,若函数是给定值求得,则函数为给定求得

lerp()函数

1
torch.lerp(start, end, weight)

lerp()函数对两个张量以start、end做线性插值

addcdiv()函数与addcmul()函数

addcdiv()函数

1
torch.addcdiv(input, tensor1, tensor2, value=1)

addcdiv()函数将tensor1tensor2的商乘以value再加上input addcmul()函数

1
torch.addcmul(input, tensor1, tensor2, value=1)

addcmul()函数将tensor1tensor2的积乘以value再加上input

cumprod()函数与cumsum()函数

cumprod()函数

1
torch.cumprod(input, dim=0)

cumprod()函数是向量维度上的计算,dim参数指定参与计算的维度 例如:定义一个形状为(2,3)的张量,指定cumprod()在3这个维度上运算

1
2
input = torch.Tensor([[0, 1, 2], [3, 4, 5]])
print(torch.cumprod(input, dim=1))

返回结果为

1
2
tensor([[ 0.,  0.,  0.],
[ 3., 12., 60.]])

cumsum()函数

1
torch.cumsum(input, dim=1)

cumprod()函数类似,cumsum()函数也是向量维度上的计算,dim参数指定参与计算的维度 同上例,指定cumsum()函数在3这个维度上运算

1
2
input = torch.Tensor([[0, 1, 2], [3, 4, 5]])
print(torch.cumsum(input, dim=1))

返回结果为

1
2
tensor([[ 0.,  1.,  3.],
[ 3., 7., 12.]])

reciprocal()函数

1
torch.reciprocal(input)

reciprocal()函数取张量中每个元素的倒数

sqrt()函数与rsqrt()函数

1
2
torch.sqrt(input)
torch.rsqrt(input)

sqrt()函数取张量中每个元素的平方根

rsqrt()函数取张量中每个元素的平方根的倒数

Pytorch中的统计学相关函数

此处以求平均值函数mean()为例

1
2
3
torch.mean(input)
torch.mean(input, dim=0)
torch.mean(input, dim=0, keepdim=True)

若只传入一个张量,则计算该张量中所有元素的平均值;

若指定维度,则计算出该维度的每个向量中元素的平均值;

若指定了keepdimTure,则返回的结果张量保持与输入张量相同的维度;

常用函数

函数名 功能
mean() 返回平均值
sum() 返回元素之和
prod() 返回元素之积
max() 返回最大值
min() 返回最小值
argmax() 返回最大值的索引值
argmin() 返回最小值的索引值
median() 返回中位数
mode() 返回众数

以上函数的参数均与上例mean()函数的参数大同小异

函数名 功能
std() 返回标准差
var() 返回方差

上述两个函数除与mean()函数相同的参数外,还有一个unbiased(bool)参数,指定是否使用贝叶斯矫正

在统计学中,贝塞尔矫正是在样本方差和样本标准差的公式中使用 n - 1 代替 n,其中 n 是样本中的观察数。该方法纠正了总体方差估计中的偏差。它还部分纠正了总体标准偏差估计中的偏差。然而,校正通常会增加这些估计中的均方误差。

histc()函数

计算输入张量的直方图

1
torch.histc(input, bins=10, min=0, max=0)
  • 参数bins指定直方图的统计区间个数;
  • minmax分别指定直方图中的最小值和最大值,若这两个参数为0,则选取输入张量中的最小/大值作为直方图的最小/大值;

bincount()函数

统计一维非负整型数组中每个值出现的频次,他的bins即区间个数比数组中的最大值大1,空数组除外

1
2
3
torch.bincount(input)
torch.bincount(input, weight)
torch.bincount(input, weight, minlength=10)

bincount()函数只能处理一维的非负整型数组

  • 参数weight指定数组中每个元素的权重,weight应当是一个与input形状相同的数组,指定weight后返回的结果将是每个元素出现的频次与权重的乘积;
  • 参数minlength指定统计结果的bins的最小长度,即区间个数的最小值,没有出现数的区间将用0补齐;

distributions模块

在pytorch中有torch.distributions这样一个模块,里面包含了很多的分布函数,例如伯努利分布、正态分布、均匀分布等,具体参考官方手册。:link:torch.distributions

在随机抽样过程中,可以通过manual_seed(seed)函数来定义随机种子,以正太分布为例:

1
2
3
4
5
# manual_seed的参数要求是int型
torch.manual_seed(1)
mean = torch.rand(1, 2)
std = torch.rand(1, 2)
print(torch.normal(mean, std))

定义随机种子后,无论执行多少次,随机产生的结果都是一样的

Pytorch常用数学与统计学函数

https://deleter-d.github.io/posts/47260/

作者

亦初

发布于

2022-10-04

更新于

2024-06-19

许可协议

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...