我在这里阅读这篇博客是为了理解理论背景this,但在阅读here之后,我对** 1)时间步,2)展开,3)隐藏单位数和4有点困惑)批量大小**是?也许有人可以在代码的基础上解释这一点,因为当我查看模型配置时,下面的代码不会展开,但是在这种情况下,时间步是做什么的?假设我有一个长度为2.000点的数据,分为40个时间步和一个特征。例如。隐藏单位是100.未定义batchsize,模型中发生了什么?
model = Sequential()
model.add(LSTM(100, input_shape=(n_timesteps_in, n_features)))
model.add(RepeatVector(n_timesteps_in))
model.add(LSTM(100, return_sequences=True))
model.add(TimeDistributed(Dense(n_features, activation='tanh')))
model.compile(loss='mse', optimizer='adam', metrics=['mae'])
history=model.fit(train, train, epochs=epochs, verbose=2, shuffle=False)
下面的代码是否仍然是没有RepeatVector的编码器解码模型?
model = Sequential()
model.add(LSTM(100, return_sequences=True, input_shape=(n_timesteps_in, n_features)))
model.add(LSTM(100, return_sequences=True))
model.add(TimeDistributed(Dense(n_features, activation='tanh')))
model.compile(loss='mse', optimizer='adam', metrics=['mae'])
history=model.fit(train, train, epochs=epochs, verbose=2, shuffle=False)
答案 0 :(得分:0)
“Unroll”只是一种处理LSTM的机制,它通过占用更多内存使它们更快。 (细节对我来说不得而知......但它肯定对步骤,形状等没有影响)。
当你说“以40个时间段分开2000分”时,我完全不知道发生了什么。
数据必须结构合理,并说“2000”数据点确实缺乏大量信息。
为LSTM构建的数据是:
示例:
我可以绘制这些数据如何随着时间的推移每天发展(每一天都是一步)
因此,如果你有2000个序列(在Keras中也称为“样本”),每个序列长度为40步,每步一个特征,这将会发生:
<强>尺寸强>
fit
方法中定义为32。该模型将处理包含32个序列/用户的批次,直到达到2000个序列/用户。 input_shape
必须为(40,1)
(fit
中可选择的免费批量大小)<强>步骤强>
您的LSTM会尝试逐步了解点击次数的变化情况。这就是他们经常出现的原因,他们计算出一步并将这些东西送到下一步,直到所有40个步骤都被处理完毕。 (你不会看到这个处理,但它是内部的)
return_sequences=True
,您将获得所有步骤的输出。模型
该模型将在每批中一起处理32个并行(和独立)序列/用户。
LSTM
图层将以循环步骤处理整个序列并返回最终结果。 (序列被杀死,没有任何步骤,因为你没有使用return_sequences=True
)
(batch, 100)
RepeatVector
创建新序列,但此序列在时间上是常量。
(batch, 40, 100)
LSTM
图层处理此常量序列并生成一个输出序列,包含所有40个步骤
(bathc, 40, 100)
TimeDistributed(Dense)
将处理每个步骤,但是独立地(并行地)处理,而不是像LSTM那样递归地处理。
(batch, 40, n_features)
n_features
输出功能。单元格,功能,单元
一切都是独立的。
输入功能是一回事,输出功能是另一回事。 Dense
不要求使用input_shape
中使用的相同数量的功能,除非这是您想要的。
当您在LSTM图层中使用100个单位时,它将生成100个要素的输出序列,形状为(batch, 40, 100)
。如果使用200个单位,则会生成具有200个要素的输出序列,形状为(batch, 40, 200)
。这是计算能力。更多神经元=模型中更多智能。
你应该替换:
model.add(LSTM(100, input_shape=(n_timesteps_in, n_features)))
model.add(RepeatVector(n_timesteps_in))
仅限:
model.add(LSTM(100, return_sequences=True,input_shape=(n_timesteps_in, n_features)))
不返回第一层中的序列,然后使用RepeatVector
创建常量序列会破坏第一个LSTM的工作。