在official documentation中,我看不到LSTM有类似batch_size
和input_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的正确指南?
答案 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
。