在 Keras 中,我可以创建具有线性激活函数的任何网络层,如下所示(例如,采用全连接层):
model.add(keras.layers.Dense(outs, input_shape=(160,), activation='linear'))
但是我在PyTorch文档中找不到线性激活函数。 ReLU 不适合,因为我的样本中有负值。如何在 PyTorch 中创建具有线性激活函数的层?
tf.keras.layers.Dense
的 activation='linear'
对应于 a(x) = x
函数。这意味着没有非线性。
因此在 PyTorch 中,您只需定义线性函数而不添加任何激活层:
torch.nn.Linear(160, outs)
正如已经回答的那样,你不需要 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]))
activation='linear'
相当于根本没有激活。
如here所示,它也称为“passthrough”,意思是它什么都不做。
因此,在 pytorch 中,您可以根本不应用任何激活,以保持同等。
但是,正如@Minsky 已经告诉的,没有 real 激活的隐藏层,即一些 非线性激活 是无用的。这就像在网络训练期间改变权重一样。
如果我假设正确,那么您这样做是因为尝试将其插入您构建的某个模块中,该模块需要“激活”作为参数,但现在您不需要任何模块。 您可以只使用线性图层,例如:
nn.Linear(1,1)
实际上添加了一个参数,该参数与上面的 passthrough 不同,但也可以工作。