gpt4 book ai didi

python - pytorch是否在nn中自动应用softmax

转载 作者:行者123 更新时间:2023-12-03 09:31:33 30 4
gpt4 key购买 nike

pytorch中,分类网络模型被定义为:

class Net(torch.nn.Module):
def __init__(self, n_feature, n_hidden, n_output):
super(Net, self).__init__()
self.hidden = torch.nn.Linear(n_feature, n_hidden) # hidden layer
self.out = torch.nn.Linear(n_hidden, n_output) # output layer

def forward(self, x):
x = F.relu(self.hidden(x)) # activation function for hidden layer
x = self.out(x)
return x

是否在这里应用softmax?以我的理解,事情应该像
class Net(torch.nn.Module):
def __init__(self, n_feature, n_hidden, n_output):
super(Net, self).__init__()
self.hidden = torch.nn.Linear(n_feature, n_hidden) # hidden layer
self.relu = torch.nn.ReLu(inplace=True)
self.out = torch.nn.Linear(n_hidden, n_output) # output layer
self.softmax = torch.nn.Softmax(dim=n_output)
def forward(self, x):
x = self.hidden(x) # activation function for hidden layer
x = self.relu(x)
x = self.out(x)
x = self.softmax(x)
return x

我知道 F.relu(self.relu(x))也适用relu,但是第一段代码不适用于softmax,对吗?

最佳答案

继续@jodag在评论中已经说过的内容,并对其进行扩展以形成完整的答案:

,PyTorch不会自动应用softmax,您可以随时根据需要应用torch.nn.Softmax()但是,softmax具有some issues with numerical stability,我们希望尽可能避免。一种解决方案是使用log-softmax,但这往往比直接计算要慢。

特别是当我们使用负对数似然作为损失函数时(在PyTorch中,这是 torch.nn.NLLLoss ,我们可以利用以下事实:(log-)softmax + NLLL的导数实际上是mathematically quite nice并且简单,这就是为什么合并有意义的原因将它们都合并到一个函数/元素中,然后结果为 torch.nn.CrossEntropyLoss 再次注意,这仅直接适用于网络的最后一层,任何其他计算均不受此影响。

关于python - pytorch是否在nn中自动应用softmax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57516027/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com