Waj*_*ini 5 machine-learning deep-learning keras tensorflow attention-model
有没有办法将原生 tf 注意层与 keras Sequential API 一起使用?
我正在寻找使用这个特定的类。我找到了自定义实现,例如this one。我真正想要的是将这个特定的类与 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'))
Run Code Online (Sandbox Code Playgroud)
我最终使用了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'])
Run Code Online (Sandbox Code Playgroud)
请注意,这就是所谓的“软注意力”或“加权平均注意力”,如“Show、Attend and Tell:Neural Image Caption Generation with Visual Attention”中所述。这里的细节更容易理解
归档时间: |
|
查看次数: |
355 次 |
最近记录: |