了解明显不同的Keras LSTM API调用

时间:2018-10-03 06:51:31

标签: python keras lstm

official documentation中,我看不到LSTM有类似batch_sizeinput_shape之类的争论。但是,我在this的中篇文章中看到了像这样的声明model.add(LSTM(batch_size, input_shape=(time_steps, features)))以及使用model.add(LSTM(4, batch_input_shape=(batch_size, look_back, 1), stateful=True))的{​​{3}}。

Q1)有人可以说明这怎么可能吗?
Q2)我无法理解的另一件事是batch_size的概念,尤其是对于文本分析。如果我希望我的模型从句子中学习,那么我应该使用批处理大小为1的1个样本作为参考吗?通常,传递给LSTM的参数似乎不确定。是否有正确使用LSTM的正确指南?

1 个答案:

答案 0 :(得分:0)

在您的问题中,您提到了

model.add(LSTM(batch_size, input_shape=(time_steps, features)))

我认为作者误导您,因为batch_size是在此使用的错误术语。如您在Keras API规范中所见,第一个参数定义了此“层”中隐藏状态/单元的数量。我查看了您链接的中间帖子,我相信可能发生的情况是batch_size等于单位数,并且作者是懒惰/统一的,因此决定对两者都使用相同的常数。自今年五月以来(撰写本文时),Keras一直没有任何变化可以解释他们的错误。

对于SO帖子,batch_input_shape仅适用于有状态LSTM层。从文档中:

  

您可以将RNN图层设置为“有状态”,这意味着状态   为一批计算的样本将被重新用作初始状态   下一批样品。假设一对一映射   在不同连续批次的样本之间。

     

要启用状态性:-在图层中指定stateful=True   构造函数。 -通过传递给模型指定固定的批量大小   如果是顺序模型:batch_input_shape=(...)到第一层   您的模型。否则,对于具有1个或多个输入层的功能模型:   batch_shape=(...)到模型中的所有第一层。这是   输入的预期形状,包括批次大小。应该是   整数元组,例如(32, 10, 100)。 -指定shuffle=False的时间   呼叫fit()

对于您有关文本分析中batch_size的性质的问题,它只是指要通过网络传播的样本数量。因此,如果您想一次仅传递一个句子,则可以将其设置为1。问题是梯度估计的准确性较差。如果可以的话(内存限制在这里起作用),您应该使用更大的batch_size