Pytorch如何使用线性激活函数

h4cxqtbf  于 2023-02-04  发布在  其他
关注(0)|答案(3)|浏览(253)

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

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

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

z9smfwbn

z9smfwbn1#

如果你看一下Keras文档,你会发现tf.keras.layers.Denseactivation='linear'对应于a(x) = x函数,这意味着没有非线性。
因此,在PyTorch中,您只需定义线性函数,而无需添加任何激活层:

torch.nn.Linear(160, outs)
bbmckpt7

bbmckpt72#

activation='linear'等同于根本没有活化。
正如here所示,它也被称为“passthrough”,意思是它什么也不做。
所以在 pytorch 中,你可以简单地不应用任何激活,以达到对等。
然而,正如@Minsky所说,没有真实的激活的隐藏层,即一些非线性激活是无用的。这就像改变权重,无论如何都是在网络保持过程中完成的。

suzh9iv8

suzh9iv83#

正如我们已经回答过的,你不需要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]))

相关问题