LSTM如何知道Conv1D-LSTM网络中的时间步长和功能?

时间:2019-09-23 20:16:52

标签: tensorflow keras conv-neural-network lstm

我有一个时间序列信号(n个样本,每个样本具有81个时间步长,并且3个特征= n x 81 x 3)。 我正在使用conv1D-LSTM网络。 n_timesteps = 81,n_features = 3。 正常的LSTM同时指定n_timesteps和n_features,但是与conv1d结合使用时,未指定它们。

  1. LSTM如何知道输入中有多少时间步长和特征?

  2. LSTM如何知道每个样品的序列末端?

  3. 是将时间步长“存储”并输入到LSTM中还是一次处理一次,然后一次又输入到LSTM中?

  4. 如果我在下方添加“ flatten”,它将失败。为什么?

  5. 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'))

1 个答案:

答案 0 :(得分:1)

1和2

一切都基于张量(某种类似的矩阵,但是具有任意数量的维)。

张量具有形状,一切都基于形状。您的数据张量是三维的:(samples, time_steps, features)

碰巧一维卷积也使用相同的3D张量:(samples, length, channels)。所以:

  • 样本=示例=序列
  • time_steps =长度
  • 功能=渠道

没有秘密。数据是结构化的,各层将使用此结构。查看您的model.summary(),并查看每一层输出的步骤和特征数。

3

各层之间没有交错。

  • conv层将处理其整个输入张量并生成输出张量。
  • 下一个转换层将获取全部输出并产生另一个完整输出
  • LSTM层将执行相同的操作,获取整个输入并输出整个张量。

4

如果将数据展平,则3D张量(samples, steps, feats)将变为2D张量(samples, something)。没有更多的数据结构可以被各层理解。

5

绝对不需要过滤器或单元的数量。唯一的事情是模型的最终输出必须与y_train数据具有相同的形状。

这是我的模型摘要。看来功能的数量已从原来的3个(输入的)更改为32个(对于conv1d)。 LSTM现在将处理conv1d的32个功能而不是输入的3个功能的整个时间步长(〜81),是否正确?

摘要示例:

第一个LSTM的输入形状为(None, 38,32)。这意味着该LSTM将处理:

  • 38个步骤
  • 32个功能

卷积丢弃边界步,而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
_________________________________________________________________```


相关问题