【发布时间】:2020-05-29 11:44:35
【问题描述】:
所以这是我尝试的两种方法中的第一种:
inputs=Input(shape=(frames, 103*4, 1))
z=TimeDistributed(Conv2D(32, (5,25), padding='same', activation='relu'), input_shape=(frames, 103*4, 1))(inputs)
z=TimeDistributed(BatchNormalization())(z)
z=TimeDistributed(ReLU())(z)
z=TimeDistributed(Dropout(0.2))(z)
z=TimeDistributed(MaxPooling2D(pool_size=(1,2)))(z)
z=TimeDistributed(Conv2D(32, (3,5), padding='same', activation='relu'))(z)
z=TimeDistributed(BatchNormalization())(z)
z=TimeDistributed(ReLU())(z)
z=TimeDistributed(Dropout(0.2))(z)
z=TimeDistributed(MaxPooling2D(pool_size=(1,2)))(z)
z=TimeDistributed(Flatten())(z)
z=LSTM(1000, dropout=0.1, recurrent_dropout=0.2, return_sequences=True)(z)
z=LSTM(1000, dropout=0.1, recurrent_dropout=0.2, return_sequences=True)(z)
z=LSTM(1000, dropout=0.1, recurrent_dropout=0.2, return_sequences=True)(z)
z=Flatten()(z)
z=Dense(1000, activation='relu')(z)
z=Dropout(0.5)(z)
z=Dense(500, activation='relu')(z)
z=Dropout(0.5)(z)
z=Dense(200, activation='relu')(z)
z=Dropout(0.5)(z)
outputs=Dense(88, activation='sigmoid')(z)
我收到此错误(尽管我的代码中的任何地方都没有步幅大小为 2):
ValueError: strides should be of length 1, 1 or 3 but was 2
我已经查看了this question,似乎我已经实现了我的代码中给出的建议。但问题是什么?我无法理解它。
最后我设法通过 Keras 的 FunctionalAPI 将 CNN 和 LSTM 结合起来:
inputs=Input(shape=(frames, 103*4, 1))
z=Conv2D(32, (5,25), padding='same', activation='relu')(inputs)
z=BatchNormalization()(z)
z=ReLU()(z)
z=Dropout(0.2)(z)
z=MaxPooling2D(pool_size=(1,2))(z)
z=Conv2D(32, (3,5), padding='same', activation='relu')(z)
z=BatchNormalization()(z)
z=ReLU()(z)
z=Dropout(0.2)(z)
z=MaxPooling2D(pool_size=(1,2))(z)
z=TimeDistributed(Flatten())(z)
z=LSTM(1000, dropout=0.1, recurrent_dropout=0.2, return_sequences=True)(z)
z=LSTM(1000, dropout=0.1, recurrent_dropout=0.2, return_sequences=True)(z)
z=LSTM(1000, dropout=0.1, recurrent_dropout=0.2, return_sequences=True)(z)
z=Flatten()(z)
z=Dense(1000, activation='relu')(z)
z=Dropout(0.5)(z)
z=Dense(500, activation='relu')(z)
z=Dropout(0.5)(z)
z=Dense(200, activation='relu')(z)
z=Dropout(0.5)(z)
outputs=Dense(88, activation='sigmoid')(z)
model=Model(inputs=inputs, outputs=outputs)
它有效,但如果这是正确的方法,我仍然不知所措。我可以通过model.summary() 看到我的 TimeDstributed 包装器的输出形状为(None, 7, 3296),并且所有 LSTM 层的输出形状为(None, 7, 1000)。我应该改变什么来给它中心框架而不是 7 框架?
说到我的数据集,我给出了 7 帧频率值的幅度来预测中心帧中的值。
【问题讨论】:
标签: python keras deep-learning lstm conv-neural-network