我正在使用时间序列数据进行 8 类分类。
看来自注意力机制的实现对模型没有影响,所以我认为我的实现有一些问题。但是,我不知道如何使用keras_self_attention模块以及如何设置参数。
问题是如何将keras_self_attention模块用于这样的分类器。
第一个混淆矩阵是 2 层 LSTM。
lstm_unit = 256
model = tf.keras.models.Sequential()
model.add(Masking(mask_value=0.0, input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Bidirectional(LSTM(lstm_unit, dropout=dropout,return_sequences=True)))
model.add(Bidirectional(LSTM(lstm_unit, dropout=dropout,return_sequences=True)))
model.add(keras.layers.Flatten())
model.add(Dense(num_classes, activation='softmax'))
第二个混淆矩阵是 2 lSTM + 2 self-attention。
lstm_unit = 256
model = tf.keras.models.Sequential()
model.add(Masking(mask_value=0.0, input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Bidirectional(LSTM(lstm_unit, dropout=dropout,return_sequences=True)))
model.add(Bidirectional(LSTM(lstm_unit, dropout=dropout,return_sequences=True)))
model.add(SeqSelfAttention(attention_type=SeqSelfAttention.ATTENTION_TYPE_MUL,
attention_activation='sigmoid'))
model.add(keras.layers.Flatten())
model.add(Dense(num_classes, activation='softmax'))
我进一步尝试了模块中的不同功能,例如
1.多头
model.add(MultiHead(Bidirectional(LSTM(units=32)), layer_num=10, name='Multi-LSTMs'))
- 剩余连接
inputs = Input(shape=(X_train.shape[1],X_train.shape[2]))
x = Masking(mask_value=0.0)(inputs)
x2 = SeqSelfAttention(attention_type=SeqSelfAttention.ATTENTION_TYPE_MUL,
attention_activation='sigmoid')(x)
x = x + x2
x = Bidirectional(LSTM(lstm_unit, dropout=dropout,return_sequences=True))(x)
x = Flatten()(x)
output = Dense(num_classes, activation='softmax')(x)
model = Model(inputs=inputs, outputs=output)
但它们或多或少相同,对 MAR MAP 和 ACC 没有太大影响。
我有 2 Titan Xp 所以计算能力对我来说不是问题,有没有办法让模型更准确?
