1.交叉熵损失函数 BCELoss 用法
例子如下,先定义loss = nn.BCELoss(),然后通过loss(lossinput, target)输入所需计算的数据:
m = nn.Sigmoid()
loss = nn.BCELoss(size_average=False, reduce=False)
input = torch.randn(3, requires_grad=True)
target = torch.empty(3).random_(2)
lossinput = m(input)
output = loss(lossinput, target)
print("输入值:") print(lossinput) print("输出的目标值:") print(target) print("计算loss的结果:") print(output)
输入值:
tensor([ 0.6682, 0.6042, 0.7042])
输出的目标值:
tensor([ 0., 1., 1.])
计算loss的结果:
tensor([ 1.1032, 0.5038, 0.3506])
2.正态分布的四个指标
偏度(skewness),是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。定义上偏度是样本的三阶标准化矩。
偏度定义中包括正态分布(偏度=0),右偏分布(也叫正偏分布,其偏度>0),左偏分布(也叫负偏分布,其偏度<0)。
峰度(peakedness;kurtosis)又称峰态系数。表征概率密度分布曲线在平均值处峰值高低的特征数。直观看来,峰度反映了峰部的尖度。随机变量的峰度计算方法为:随机变量的四阶中心矩与方差平方的比值。
峰度包括正态分布(峰度值=3),厚尾(峰度值>3),瘦尾(峰度值<3)
步骤如下:
1.求出各变量(指标)的算术平均值(数学期望)xi和标准差si ;
2.进行标准化处理:
zij=(xij-xi)/si
其中:zij为标准化后的变量值;xij为实际变量值。
3.将逆指标前的正负号对调。
标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。
#返回一个数据的四个指标, 分别是均值, 方差, 偏度, 峰度
- 我们希望通过这四个指标, 来判断我们生成的数据是否是需要的数据
mean = torch.mean(d)
diffs = d - mean
var = torch.mean(torch.pow(diffs, 2.0))
std = torch.pow(var, 0.5)
zscores = diffs / std
skews = torch.mean(torch.pow(zscores, 3.0))
kurtoses = torch.mean(torch.pow(zscores, 4.0)) - 3.0 # excess kurtosis, should be 0 for Gaussian
final = torch.cat((mean.reshape(1,), std.reshape(1,), skews.reshape(1,), kurtoses.reshape(1,)))
return final
3.lambda函数的嵌套使用:
#定义get_distribution_sampler后,调用此函数时只是输入此函数的参数mu, sigma,之后得到的结果赋值给d_sampler ,在使用d_sampler 时输入的参数是get_distribution_sampler的lambda函数的参数n.
def get_distribution_sampler(mu, sigma):
return lambda n: torch.Tensor(np.random.normal(mu, sigma, (1, n))) # Gaussian
d_sampler = get_distribution_sampler(data_mean, data_stddev)
d_real_data = Variable(d_sampler(d_input_size)) #d_input_size的值赋给get_distribution_sampler里的lambda里的n
4.反向传播中的细节-计算梯度时的默认累加
下面是迭代2次使用zero_grad()来进行梯度清零操作的情况
w.grad: tensor([-74.6261])
b.grad: tensor([-12.5532])
w.grad: tensor([-48.2813])
b.grad: tensor([-8.3831])
下面为迭代2次没有进行梯度清零的情况,可见第二次梯度会在第一次基础上相加
w.grad: tensor([-74.6261])
b.grad: tensor([-12.5532])
w.grad: tensor([-122.9075])
b.grad: tensor([-20.9364])
https://blog.csdn.net/wuzhongqiang/article/details/102572324
https://blog.csdn.net/xbmatrix/article/details/69360167
https://mathpretty.com/10808.html
https://blog.csdn.net/tmk_01/article/details/80844260