了解给定LSTM模型中有多少个隐藏层

时间:2019-05-07 19:16:35

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

我不了解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()的隐藏层。

请纠正我并澄清我的疑问。如有可能,请尝试通过图表了解。

2 个答案:

答案 0 :(得分:1)

模型体系结构的

图形表示,以了解层的输出如何附加到序列中的下一层。

enter image description here

图片不言自明,与您的型号摘要匹配。另请注意,模型摘要中的Batch_SizeNone,因为它是动态计算的。另外请注意,在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)))