pytorch用法记录(GAN算法阅读)

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)

正规化方法进行数据标准化

pic2

  • 这种方法基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。将A的原始值x使用z-score标准化到x’。
  • z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
  • spss默认的标准化方法就是z-score标准化。
  • 用Excel进行z-score标准化的方法:在Excel中没有现成的函数,需要自己分步计算,其实标准化的公式很简单。

步骤如下:
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值