由于知识有限,我建立了一个LSTM网络。我想验证我的假设并更好地理解Keras。
网络代码:
#...
model.add(LSTM(8, batch_input_shape=(None, 100, 4), return_sequences=True))
model.add(LeakyReLU())
model.add(LSTM(4, return_sequences=True))
model.add(LeakyReLU())
model.add(LSTM(1, return_sequences=False, activation='softmax'))
#...我尝试建立了一个具有4个特征输入,2个隐层的网络:第一层有8个神经元,第二层有4个神经元,输出层有1个神经元。

我想要的激活是LeakyReLU。
问:
activation='linear'添加到LSTM层?发布于 2018-10-04 15:10:53
至于第一个问题:“正确”在什么意义上?也就是说,这取决于您正在建模的问题,因此需要提供更多的细节。
当最后一层只有一个输出单元时,不使用softmax作为激活函数。这是因为softmax规范了输出,使其元素之和为1,即类似于概率分布。因此,如果在一个只有一个输出单元的层上使用它,它的输出总是1。相反,使用linear (在回归的情况下,即预测实际值)或sigmoid (在二进制分类的情况下)。另外,通常使用Dense层作为最后一层,作为最终的回归者或分类器。例如:
model.add(LSTM(8, batch_input_shape=(None, 100, 4), return_sequences=True))
model.add(LeakyReLU())
model.add(LSTM(4, return_sequences=True))
model.add(LeakyReLU())
model.add(LSTM(1, return_sequences=False))
model.add(Dense(1, activation='sigmoid'))至于层数(根据图):有点模糊,但我认为有三个LSTM层,第一个层有4个单元,第二个层有8个单元,最后一个层有4个单元。至于最后一层,它似乎是一个密集的层。因此,模型将如下所示(假设LeakyReLU应用于LSTM层的输出):
model.add(LSTM(4, batch_input_shape=(None, 100, 4), return_sequences=True))
model.add(LeakyReLU())
model.add(LSTM(8, return_sequences=True))
model.add(LeakyReLU())
model.add(LSTM(4, return_sequences=False))
model.add(Dense(1, activation='sigmoid')) # or activation='linear' if it is a regression problem至于使用LeakyReLU层:我想您是正确的,应该使用linear激活作为其上一层的激活(也像建议的这里那样,尽管在那里使用了Dense层)。这是因为在默认情况下,LSTM层的激活是双曲切线(即tanh),因此它将输出压缩到-1,1,我认为当您将LeakyReLU应用到这个范围时,这可能并不有效;但是,我不确定这一点,因为我不完全熟悉layer的实际使用和推荐用法。
https://stackoverflow.com/questions/52647115
复制相似问题