Keras中的注意:如何在Keras致密层中添加不同的注意机制?

2024-05-14 01:15:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Keras的新成员,我正在尝试在Keras中构建一个简单的自动编码器:

在这里我尝试了:

data = Input(shape=(w,), dtype=np.float32, name='input_da')
noisy_data = Dropout(rate=0.2, name='drop1')(data)

encoded = Dense(256, activation='relu',
            name='encoded1', **kwargs)(noisy_data)
encoded = Lambda(mvn, name='mvn1')(encoded)

encoded = Dense(128, activation='relu',
            name='encoded2', **kwargs)(encoded)

encoded = Lambda(mvn, name='mvn2')(encoded)
encoded = Dropout(rate=0.5, name='drop2')(encoded)


encoder = Model([data], encoded)
encoded1 = encoder.get_layer('encoded1')
encoded2 = encoder.get_layer('encoded2')


decoded = DenseTied(256, tie_to=encoded2, transpose=True,
            activation='relu', name='decoded2')(encoded)
decoded = Lambda(mvn, name='new_mv')(decoded)


decoded = DenseTied(w, tie_to=encoded1, transpose=True,
            activation='linear', name='decoded1')(decoded)

看起来像这样:

^{pr2}$

我可以在这个模型中添加注意层吗?我应该在第一个编码的输出之后和第二个编码的输入之前添加吗?在

encoded = Lambda(mvn, name='mvn1')(encoded)

    Here?

encoded = Dense(128, activation='relu',
            name='encoded2', **kwargs)(encoded)

我也经历了这个美丽的自由:

https://github.com/CyberZHG/keras-self-attention

他们已经实现了各种类型的注意机制,但这是针对顺序模型的。如何在我的模型中添加这些关注?在

我非常专注地试着:

encoded = Dense(256, activation='relu',
        name='encoded1', **kwargs)(noisy_data)


encoded = Lambda(mvn, name='mvn1')(encoded)

attention_probs = Dense(256, activation='softmax', name='attention_vec')(encoded)
attention_mul = multiply([encoded, attention_probs], name='attention_mul')
attention_mul = Dense(256)(attention_mul)

print(attention_mul.shape)

encoded = Dense(128, activation='relu',
        name='encoded2', **kwargs)(attention_mul)

它在正确的地方吗?我能用这个模型添加其他的注意机制吗?在


Tags: lambdaname模型dataactivationkwargsdenserelu
1条回答
网友
1楼 · 发布于 2024-05-14 01:15:45

我想你所做的是一种增加注意力的正确方法,因为注意力本身就是一个密集层的重量。另外,我想在编码器之后应用注意力是正确的,因为它会将注意力集中到任务所需的数据分发的最“信息”部分。在

相关问题 更多 >