问题描述
我在用Keras的Embedding层做nlp相关的实现时,发现了一个神奇的问题,先上代码:
a = Input(shape=[15]) # None*15
b = Input(shape=[..., 30, 1), dtype=bool)
Tensor(“concatenate_1/Cast:0”, shape=(?, 30, 5), dtype=bool)
发现了!..., 30) dtype=bool , None]
果然如此,总结一下问题的所在:
Embedding层的输出会比输入多一维,但Embedding生成的mask的维度与输入一致。...:
return None
else:
return K.not_equal(inputs, 0)
可见,Embedding层的mask是记录了Embedding输入中非零元素的位置,并且传给后面的支持...时,输入矩阵中的0会被mask掉,而这个mask的操作是体现在MySumLayer中的,将输入(3, 3, 5)与mask(3, 3, 5)逐元素相乘,再相加。