赞
踩
def initialize(self):
for m in self.modules():
if isinstance(m, nn.Linear):
a = nn.sqrt(6/(self.weight.data, std=np.sqrt(1/self.neural_num)))
tanh_gain = nn.init.calculate_gain('tanh')
a *= tanh_gain
nn.init.uniform_(m.weight.data, -a, a)
也可以直接使用PyTorch提供的:
nn.init.xavier_uniform_(m.weight.data, gain=tanh_gain)
nn.init.normal_(m.weight.data,std=np.sqrt(2/self.neural_num))
nn.init.kaiming_normal_(m.weight.data)
nn.init.calculate_gain(nonlinearity, param=None)
主要功能:计算激活函数的方差变化尺度
主要参数:
nonlinearity:激活函数名称
param:激活函数的参数,如Linear ReLU 的 negative_slop
nn.CrossEntroyLoss(weight=None,
size_average=None,
ignore_index=-1,
reduce=None,
reduction='mean')
功能:nn.LogSoftmax()与nn.NLLLoss()结合,进行交叉熵计算
主要参数:
weight:各类别的loss设置权值
ignore_index:忽略某个类别
reduction: 计算模式,可为none/sum/mean
none- 逐个元素计算
sum- 所有元素求和,返回标量
mean- 加权平均,返回标量
交叉熵 = 信息熵+相对熵
交叉熵:
H
(
P
,
Q
)
=
−
∑
i
=
1
N
P
(
x
i
)
l
o
g
(
Q
(
x
i
)
)
H(P,Q)=-\sum^N_{i=1}P(x_i)log(Q(x_i))
H(P,Q)=−∑i=1NP(xi)log(Q(xi))
自信息:
l
(
x
)
=
−
l
o
g
[
p
(
x
)
]
l(x) = -log[p(x)]
l(x)=−log[p(x)]
熵:
H
(
P
)
=
E
x
p
[
I
(
x
)
]
=
−
∑
i
N
P
(
x
i
)
l
o
g
(
x
i
)
H(P)=E_{x~p}[I(x)]=-\sum^N_{i}P(x_i)log(x_i)
H(P)=Ex p[I(x)]=−∑iNP(xi)log(xi)
相对熵:
D
K
L
(
P
,
Q
)
=
E
x
p
[
l
o
g
P
(
x
)
Q
(
x
)
]
=
E
x
p
[
l
o
g
P
(
x
)
−
l
o
g
Q
(
x
)
]
=
∑
i
=
1
N
P
(
x
i
)
[
l
o
g
P
(
x
i
)
−
l
o
g
Q
(
x
i
)
]
=
∑
i
=
1
N
P
(
x
i
)
l
o
g
P
(
x
i
)
−
∑
i
=
1
N
P
(
x
i
)
l
o
g
Q
(
x
i
)
=
H
(
P
,
Q
)
−
H
(
P
)
D_{KL}(P,Q)=E_{x~p}[log{\frac{P(x)}{Q(x)}}]=E_{x~p}[logP(x)-logQ(x)]=\sum^N_{i=1}P(x_i)[logP(x_i)-logQ(x_i)]=\sum^N_{i=1}P(x_i)logP(x_i)-\sum^N_{i=1}P(x_i)logQ(x_i)=H(P,Q)-H(P)
DKL(P,Q)=Ex p[logQ(x)P(x)]=Ex p[logP(x)−logQ(x)]=i=1∑NP(xi)[logP(xi)−logQ(xi)]=i=1∑NP(xi)logP(xi)−i=1∑NP(xi)logQ(xi)=H(P,Q)−H(P)
2. nn.NLLLoss
nn.NLLLoss(weight=None,
size_average=None,
ignore_index=-1,
reduce=None,
reduction='mean')
功能:实现负对数似然函数中的负号功能
主要参数:
weight: 各类别的loss设置权值
ignore_index: 忽略某个类别
reduction: 计算模式,可为none/sum/mean
3. nn.BCELoss
nn.BCELoss(weight=None,
size_average=None,
reduce = None,
reduction='mean')
功能:二分类交叉熵
主要参数:
weight: 各类别的loss设置权值
ignore_index: 忽略某个类别
reduction: 计算模式,可为none/sum/mean
4. nn.L1Loss
nn.L1Loss(size_average=None, reduce=None,
reduction='mean')
功能:计算inputs与target之差的绝对值
5. nn.MSELoss
nn.MSELoss(size_average=None, reduce=None,reduction='mean')
功能:计算inputs与target之差的平方
6. nn.SmoothL1Loss
nn.SmoothL1Loss(size_average=None, reduce=None, reduction='mean')
功能:平滑的L1loss,在两者差异大时能够比较平滑,在差异小时,能够快速收敛
nn.PoissonNLLLoss(log_input=True, full=False, size_average=None, eps=1e-08, reduce=None, reduction='mean')
功能:泊松分布的负对数似然损失函数
主要参数:
log_input: 输入是否为对数形式,决定计算公式
full: 计算所有loss,默认为False
eps: 修正项,避免log为nan
nn.KLDivLoss(size_average=None,reduce=None,reduction='mean')
功能:计算KLD(divergence),KL散度,相对熵
注意事项:需提前将输入计算log-probabilities,如通过nn.logsoftmax()
主要参数:
reduction: none/sum/mean/batchmean
9. nn.MarginRankingLoss
nn.MarginRankingLoss(margin=0.0, size_average=None, reduce=None,reduction='mean')
功能:计算两个向量之间的相似度,用于排序任务
特别说明:该方法计算两组数据之间的差异,返回一个n*n的loss矩阵
主要参数:
margin: 边界值,x1与x2之间的差异值
nn.TripletMarginLoss(margin=1.0, p=2.0, eps=1e-06, swap=False, size_average=None, reduce=None, reduction='mean')
功能:计算三元组损失,人脸验证,reid常用
主要参数:
p: 范数的阶,默认为2
margin: 边界值
该损失函数目的是让当前特征与最难的正样本之间的距离小于最难的负样本之间的距离,只有距离小于margin时,才不会产生损失
nn.CosineEmbeddingLoss(margin=0.0,size_average=None,reduce=None,reduction='mean')
功能:采用余弦相似度计算两个输入的相似性
主要参数:
margin:可取值[-1,1],推荐为[0,0.5]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。