我不了解LSTM模型的基本结构。
这是我的模型:
def build_model(train,n_input):
train_x, train_y = to_supervised(train, n_input)
verbose, epochs, batch_size = 1, 60,20
n_timesteps, n_features, n_outputs = train_x.shape[1], train_x.shape[2], train_y.shape[1]
train_y = train_y.reshape((train_y.shape[0], train_y.shape[1], 1))
model = Sequential()
model.add(LSTM(200, activation='relu', input_shape=(n_timesteps, n_features)))
model.add(RepeatVector(n_outputs))
model.add(LSTM(200, activation='relu', return_sequences=True))
model.add(TimeDistributed(Dense(100, activation='relu')))
model.add(TimeDistributed(Dense(1)))
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
model.fit(train_x, train_y, epochs=epochs, batch_size=batch_size, verbose=verbose)
return model
这里是my model.summary()
Layer (type) Output Shape Param #
=================================================================
lstm_5 (LSTM) (None, 200) 172000
_________________________________________________________________
repeat_vector_3 (RepeatVecto (None, 7, 200) 0
_________________________________________________________________
lstm_6 (LSTM) (None, 7, 200) 320800
_________________________________________________________________
time_distributed_5 (TimeDist (None, 7, 100) 20100
_________________________________________________________________
time_distributed_6 (TimeDist (None, 7, 1) 101
=================================================================
Total params: 513,001
Trainable params: 513,001
Non-trainable params: 0
_________________________________________________________________
None
从上面的总结中,我不明白什么是lstm_5或lstm_6。也不告诉网络中隐藏层的数量
请有人帮我了解一下,在上述模型中,神经元有多少个隐藏层。
我基本上对add(LSTM(200 ...)
和add(TimeDistributed(Dense(100..)
感到困惑
我认为200和100是隐藏层中神经元的数量,有4个包含所有.add()
的隐藏层。
请纠正我并澄清我的疑问。如有可能,请尝试通过图表了解。
答案 0 :(得分:1)
图形表示,以了解层的输出如何附加到序列中的下一层。
图片不言自明,与您的型号摘要匹配。另请注意,模型摘要中的Batch_Size
是None
,因为它是动态计算的。另外请注意,在LSTM中,隐藏层的大小与LSTM输出的大小相同。
答案 1 :(得分:0)
此处定义了一个具有200个神经元的LSTM层。 200维向量基本将序列表示为一个内部嵌入:
model.add(LSTM(200, activation='relu', input_shape=(n_timesteps, n_features)))
因此您将获得(None,200)的输出
在这里您将引导向量重复7次:
model.add(RepeatVector(n_outputs))
您得到的矢量为(None,7,200)
您再次将此向量用作序列,并在每个时间步返回200个神经元的状态,不清楚原因:
model.add(LSTM(200, activation='relu', return_sequences=True))
您得到的矢量为(None,7,200)
您可以在每个时间步骤上应用100个神经元的权重共享密集层。我实际上不知道,为什么在这里共享权重,看起来很奇怪:
model.add(TimeDistributed(Dense(100, activation='relu')))
您得到的矢量为(None,7,100)
最后,对于这7个时间步中的每一个,您都应用最后一个神经元,再次使用共享的权重,从100维矢量中得出一个值。结果是由7个神经元组成的向量,每个类一个:
model.add(TimeDistributed(Dense(1)))