我有一个时间序列信号(n个样本,每个样本具有81个时间步长,并且3个特征= n x 81 x 3)。 我正在使用conv1D-LSTM网络。 n_timesteps = 81,n_features = 3。 正常的LSTM同时指定n_timesteps和n_features,但是与conv1d结合使用时,未指定它们。
LSTM如何知道输入中有多少时间步长和特征?
LSTM如何知道每个样品的序列末端?
是将时间步长“存储”并输入到LSTM中还是一次处理一次,然后一次又输入到LSTM中?
如果我在下方添加“ flatten”,它将失败。为什么?
conv1d中的过滤器数量是否必须与LSTM中的过滤器数量相对应?
model = Sequential()
model.add(Conv1D(filters=32, kernel_size=3, activation='relu', input_shape=(n_timesteps,n_features)))
model.add(Conv1D(filters=32, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
#model.add(Flatten())
#model.add(LSTM(units=128, input_shape=(n_timesteps, n_features), return_sequences=True))
model.add(LSTM(units=128, return_sequences=True))
model.add(Dropout(0.3))
model.add(LSTM(units=64, dropout=0.5, recurrent_dropout=0.5, return_sequences=True))
model.add(LSTM(units=32, dropout=0.5, recurrent_dropout=0.5))
model.add(Dense(16, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(1, activation='sigmoid'))
答案 0 :(得分:1)
一切都基于张量(某种类似的矩阵,但是具有任意数量的维)。
张量具有形状,一切都基于形状。您的数据张量是三维的:(samples, time_steps, features)
。
碰巧一维卷积也使用相同的3D张量:(samples, length, channels)
。所以:
没有秘密。数据是结构化的,各层将使用此结构。查看您的model.summary()
,并查看每一层输出的步骤和特征数。
各层之间没有交错。
如果将数据展平,则3D张量(samples, steps, feats)
将变为2D张量(samples, something)
。没有更多的数据结构可以被各层理解。
绝对不需要过滤器或单元的数量。唯一的事情是模型的最终输出必须与y_train
数据具有相同的形状。
这是我的模型摘要。看来功能的数量已从原来的3个(输入的)更改为32个(对于conv1d)。 LSTM现在将处理conv1d的32个功能而不是输入的3个功能的整个时间步长(〜81),是否正确?
第一个LSTM的输入形状为(None, 38,32)
。这意味着该LSTM将处理:
卷积丢弃边界步,而maxpooling将步减半。
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d (Conv1D) (None, 79, 32) 320
_________________________________________________________________
conv1d_1 (Conv1D) (None, 77, 32) 3104
_________________________________________________________________
dropout (Dropout) (None, 77, 32) 0
_________________________________________________________________
max_pooling1d (MaxPooling1D) (None, 38, 32) 0
_________________________________________________________________
lstm (LSTM) (None, 38, 128) 82432
_________________________________________________________________
dropout_1 (Dropout) (None, 38, 128) 0
_________________________________________________________________
lstm_1 (LSTM) (None, 38, 64) 49408
_________________________________________________________________
lstm_2 (LSTM) (None, 32) 12416
_________________________________________________________________
dense (Dense) (None, 16) 528
_________________________________________________________________
dropout_2 (Dropout) (None, 16) 0
_________________________________________________________________
dense_1 (Dense) (None, 1) 17
=================================================================
Total params: 148,225
Trainable params: 148,225
Non-trainable params: 0
_________________________________________________________________```