在Keras中,我可以使用线性激活函数创建任何网络层,如下所示(例如,采用完全连接的层):
model.add(keras.layers.Dense(outs, input_shape=(160,), activation='linear'))
但是我在PyTorch文档中找不到线性激活函数,ReLU不适合,因为我的样本中有负值,我如何在PyTorch中创建一个具有线性激活函数的层?
z9smfwbn1#
如果你看一下Keras文档,你会发现tf.keras.layers.Dense的activation='linear'对应于a(x) = x函数,这意味着没有非线性。因此,在PyTorch中,您只需定义线性函数,而无需添加任何激活层:
tf.keras.layers.Dense
activation='linear'
a(x) = x
torch.nn.Linear(160, outs)
bbmckpt72#
activation='linear'等同于根本没有活化。正如here所示,它也被称为“passthrough”,意思是它什么也不做。所以在 pytorch 中,你可以简单地不应用任何激活,以达到对等。然而,正如@Minsky所说,没有真实的激活的隐藏层,即一些非线性激活是无用的。这就像改变权重,无论如何都是在网络保持过程中完成的。
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]))
3条答案
按热度按时间z9smfwbn1#
如果你看一下Keras文档,你会发现
tf.keras.layers.Dense
的activation='linear'
对应于a(x) = x
函数,这意味着没有非线性。因此,在PyTorch中,您只需定义线性函数,而无需添加任何激活层:
bbmckpt72#
activation='linear'
等同于根本没有活化。正如here所示,它也被称为“passthrough”,意思是它什么也不做。
所以在 pytorch 中,你可以简单地不应用任何激活,以达到对等。
然而,正如@Minsky所说,没有真实的激活的隐藏层,即一些非线性激活是无用的。这就像改变权重,无论如何都是在网络保持过程中完成的。
suzh9iv83#
正如我们已经回答过的,你不需要pytorch中的线性激活层,但是如果你需要包含它,你可以写一个自定义的,它会传递如下的输出。
您可以像调用任何其他激活函数一样调用它。