提问人:Saurav-- 提问时间:8/15/2017 最后编辑:InnatSaurav-- 更新时间:4/4/2023 访问量:1490
注意层抛出 TypeError:Permute 层不支持在 Keras 中屏蔽
Attention Layer throwing TypeError: Permute layer does not support masking in Keras
问:
我一直在关注这篇文章,以便在我的模型上实现注意力层。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 行,在 型号 = 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) File “/root/.virtualenvs/keras_tf/lib/python3.5/site-packages/keras/engine/topology.py”, 744 行,compute_mask str(mask)) TypeError:第 permute_1 层不支持屏蔽,但传递了input_mask:Tensor(“merge_2/All:0”, shape=(?, 15), dtype=布尔值)
我浏览了这个线程,上面写着:
这是 Keras 源代码中的一个小改动(将 Lambda 层中的 supports_masking 类变量设置为 True 而不是 False)。否则就没有办法做到这一点。不过,遮罩并不是真正必要的。
在哪里可以将变量设置为 True?另外,还有其他解决方案吗?supports_masking
答:
我会说:不要使用掩蔽。
该实现试图将层应用于可变维度 (TIME_STEPS) 有一些非常奇怪的事情。Dense
这将需要层中可变数量的权重,这根本不可能。(使用屏蔽时,您会告诉每个不同的样本应该忽略一些权重)。
我想说的是,你应该在输入中有一个标记/单词,告诉“这是句子/电影/序列的结尾”,并用这个标记填充剩余的长度。然后,关闭或移除在模型中使用遮罩的任意位置(声明嵌入层或实际遮罩层时的参数)。
尝试更改 keras 本机代码可能会导致行为不稳定和错误的结果(如果不是错误)。
此类层不支持遮罩是有原因的,主要是类似于上面关于密集层的解释。如果你改变这一点,谁知道会出什么问题?永远不要弄乱源代码,除非你真的非常确定它可能产生的所有后果。
如果即使你想使用掩码,我发现(但没有测试)一些复杂的解决方案,例如: layer:MaskEatingLambda
- 在此处查看@sergeyf的评论:https://github.com/keras-team/keras/issues/1579
- 在此处查看他们的自定义图层:https://gist.github.com/sergeyf/a95de7d089668b41decad343ee30b89e
我是该软件包的作者之一。
您应该使用最新版本。 以前的版本存在一些概念问题。
评论