Pytorch如何使用线性激活函数

问题描述 投票:0回答:4

在 Keras 中,我可以创建具有线性激活函数的任何网络层,如下所示(例如,采用全连接层):

model.add(keras.layers.Dense(outs, input_shape=(160,), activation='linear'))

但是我在PyTorch文档中找不到线性激活函数。 ReLU 不适合,因为我的样本中有负值。如何在 PyTorch 中创建具有线性激活函数的层?

keras pytorch
4个回答
3
投票

如果你查看 Keras 文档,你会看到

tf.keras.layers.Dense
activation='linear'
对应于
a(x) = x
函数。这意味着没有非线性。

因此在 PyTorch 中,您只需定义线性函数而不添加任何激活层:

torch.nn.Linear(160, outs)

3
投票

正如已经回答的那样,你不需要 pytorch 中的线性激活层。但如果您需要包含它,您可以编写一个自定义的,按如下方式传递输出。

class linear(torch.nn.Module):
    # a linear activation function based on y=x
    def forward(self, output):return output

然后您可以像调用任何其他激活函数一样调用它。

linear()(torch.tensor([1,2,3])) == nn.ReLU()(torch.tensor([1,2,3]))

1
投票

activation='linear'
相当于根本没有激活。

here所示,它也称为“passthrough”,意思是它什么都不做。

因此,在 pytorch 中,您可以根本不应用任何激活,以保持同等。

但是,正如@Minsky 已经告诉的,没有 real 激活的隐藏层,即一些 非线性激活 是无用的。这就像在网络训练期间改变权重一样。


0
投票

如果我假设正确,那么您这样做是因为尝试将其插入您构建的某个模块中,该模块需要“激活”作为参数,但现在您不需要任何模块。 您可以只使用线性图层,例如:

nn.Linear(1,1)

实际上添加了一个参数,该参数与上面的 passthrough 不同,但也可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.