有没有办法将本地tf Attention层与keras Sequential API一起使用?
我正在寻找使用这个特殊的课程。我发现定制实现,如这一个。我真正要寻找的是将此特定类与Sequential API一起使用
这是我正在寻找的代码示例
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Embedding(vocab_length,
EMBEDDING_DIM, input_length=MAX_SEQUENCE_LENGTH,
weights=[embedding_matrix], trainable=False))
model.add(tf.keras.layers.Dropout(0.3))
model.add(tf.keras.layers.Conv1D(64, 5, activation='relu'))
model.add(tf.keras.layers.MaxPooling1D(pool_size=4))
model.add(tf.keras.layers.CuDNNLSTM(100))
model.add(tf.keras.layers.Dropout(0.4))
model.add(tf.keras.layers.Attention()) # Doesn't work this way
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
我最终使用了tsterbak在此存储库中找到的自定义类。这是AttentionWeightedAverage类。它与Sequential API兼容这是我的模型供参考:
model = Sequential()
model.add(Embedding(input_dim=vocab_length,
output_dim=EMBEDDING_DIM, input_length=MAX_SEQUENCE_LENGTH,
weights=[embedding_matrix], trainable=False))
model.add(Conv1D(64, 5, activation='relu'))
model.add(MaxPooling1D(pool_size=4))
model.add(Bidirectional(GRU(100, return_sequences=True)))
model.add(AttentionWeightedAverage())
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer="adam", metrics=['accuracy'])
请注意,这就是所谓的“软注意力”或“加权平均注意力”,如“显示,参加和讲述:具有视觉注意力的神经图像字幕生成”中所述。细节更容易理解这里
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句