【问题标题】:When and where should we use these keras LSTM models我们应该在何时何地使用这些 keras LSTM 模型
【发布时间】:2017-12-12 00:49:34
【问题描述】:

我知道 RNN、LSTM、神经网络、激活函数是如何工作的,但是从各种可用的 LSTM 模型中,我不知道应该在什么时候使用什么数据。我创建了这 5 个模型作为我见过的不同 LSTM 模型的样本,但我不知道应该使用哪个最佳序列数据集。我对这些模型的第二/第三行感到困惑。 model1 和 model4 一样吗?为什么 model1.add(LSTM(10, input_shape=(max_len, 1), return_sequences=False))model4.add(Embedding(X_train.shape[1], 128, input_length=max_len)) 不同。如果有人能用简单的英语解释这五个模型,我将不胜感激。

from keras.layers import Dense, Dropout, Embedding, LSTM, Bidirectional
from keras.models import Sequential
from keras.layers.wrappers import TimeDistributed

#model1
model1 = Sequential()
model1.add(LSTM(10, input_shape=(max_len, 1), return_sequences=False))
model1.add(Dense(1, activation='sigmoid'))
model1.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

print model1.summary()

#model2
model2 = Sequential()
model2.add(LSTM(10, batch_input_shape=(1, 1, 1), return_sequences=False, stateful=True))
model2.add(Dense(1, activation='sigmoid'))
model2.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

print model2.summary()


#model3
model3 = Sequential()
model3.add(TimeDistributed(Dense(X_train.shape[1]), input_shape=(X_train.shape[1],1)))
model3.add(LSTM(10, return_sequences=False))
model3.add(Dense(1, activation='sigmoid'))
model3.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

print model3.summary()


#model4
model4 = Sequential()
model4.add(Embedding(X_train.shape[1], 128, input_length=max_len))
model4.add(LSTM(10))
model4.add(Dense(1, activation='sigmoid'))
model4.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

print model4.summary()

#model5
model5 = Sequential()
model5.add(Embedding(X_train.shape[1], 128, input_length=max_len))
model5.add(Bidirectional(LSTM(10)))
model5.add(Dense(1, activation='sigmoid'))
model5.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

print model5.summary()

【问题讨论】:

    标签: machine-learning keras deep-learning lstm recurrent-neural-network


    【解决方案1】:

    所以:

    1. 第一个网络是最好的分类网络。它只是分析整个序列——一旦所有输入步骤都输入模型——它就能够执行决策。这种架构还有其他变体(例如使用GlobalAveragePooling1D 或最多一个),从概念的角度来看非常相似。

    2. 第二个网络 - 从设计的角度来看,它与第一个架构非常相似。它们的不同之处在于,在第一种方法中,两个后续的 fitpredict 调用是完全独立的,而在这里 - 第二次调用的起始状态与第一次调用中的最后一个相同。这可以实现很多很酷的场景,例如变长序列分析或例如决策过程,因为您可以有效地停止推理/训练过程 - 影响网络或输入并以实际状态返回它。

    3. 当您不想在计算的所有阶段都使用循环网络时,这是最好的选择。特别是 - 当您的网络很大时 - 从参数数量的角度来看,引入循环层非常昂贵(引入循环连接通常会使参数数量增加至少 2 倍)。因此,您可以应用静态网络作为预处理阶段 - 然后将结果提供给循环部分。这使训练更容易。

    4. 模型是案例 3 的一个特例。这里 - 你有一个令牌序列,这些令牌通过 one-hot 编码进行编码,然后使用 Embedding 进行转换。这样可以减少进程的内存消耗。

    5. 双向网络为您提供的优势在于,您不仅可以了解每个步骤的序列先前历史 - 还可以了解进一步的步骤。这是以计算成本为代价的,而且您也失去了顺序数据馈送的可能性 - 因为在执行分析时您需要有一个完整的序列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 2015-08-03
      • 2018-01-30
      • 1970-01-01
      相关资源
      最近更新 更多