我一直在关注这篇文章,以便在我的模型上实现注意力层。LSTM
代码attention layer
:
INPUT_DIM = 2
TIME_STEPS = 20
SINGLE_ATTENTION_VECTOR = False
APPLY_ATTENTION_BEFORE_LSTM = False
def attention_3d_block(inputs):
input_dim = int(inputs.shape[2])
a = Permute((2, 1))(inputs)
a = Reshape((input_dim, TIME_STEPS))(a)
a = Dense(TIME_STEPS, activation='softmax')(a)
if SINGLE_ATTENTION_VECTOR:
a = Lambda(lambda x: K.mean(x, axis=1), name='dim_reduction')(a)
a = RepeatVector(input_dim)(a)
a_probs = Permute((2, 1), name='attention_vec')(a)
output_attention_mul = merge(
[inputs, a_probs],
name='attention_mul',
mode='mul'
)
return output_attention_mul
我得到的错误:
文件“main_copy.py”,第 244 行,在 model = create_model(X_vocab_len, X_max_len, y_vocab_len, y_max_len, HIDDEN_DIM, LAYER_NUM) 文件“main_copy.py”,第 189 行,在 create_model attention_mul = attention_3d_block(temp) 文件“main_copy.py ”,第 124 行,在 attention_3d_block a = Permute((2, 1))(inputs) 文件“/root/.virtualenvs/keras_tf/lib/python3.5/site-packages/keras/engine/topology.py”,行597,调用 output_mask = self.compute_mask(inputs, previous_mask) 文件“/root/.virtualenvs/keras_tf/lib/python3.5/site-packages/keras/engine/topology.py”,第 744 行,在 compute_mask str(掩码))类型错误:图层 permute_1 不支持掩码,但传递了一个 input_mask:Tensor("merge_2/All:0", shape=(?, 15), dtype=bool)
我经历了这个线程,它说:
这是 Keras 源代码中的一个小改动(将 Lambda 层中的 supports_masking 类变量设置为 True 而不是 False)。否则没有办法做到这一点。不过,掩蔽并不是真的必要。
在哪里可以将supports_masking
变量设置为 True?另外,还有其他解决方案吗?