我正在使用Keras和TF。
我传递填充序列作为输入(填充值= -1)并使用掩码值设置为-1.0的Masking
图层掩蔽输入。但是,当我在BiLSTM图层之后收集x
的输出时,我看到屏蔽位置的前向状态为非零。
from keras.layers import Embedding, LSTM, Dense, Input, Masking
from keras.layers.wrappers import Bidirectional
from keras.models import Model
import numpy as np
import tensorflow as tf
vec = np.random.randn(3, 5)
inp = Input((3,))
x = Masking(mask_value=-1.0)(inp)
x = Embedding(3, 5, weights=[vec], input_length=3, trainable=False)(x)
x = Bidirectional(LSTM(10, return_sequences=True))(x)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(sess.run(x, {inp: [[0, 2, -1], [1, -1, -1]]}))
这是输出:
[[[ -4.62276675e-03 -4.01115604e-03 5.02156140e-03 1.97147974e-03
7.38522829e-03 5.62763307e-03 2.18000403e-03 8.19381850e-04
7.11255067e-04 -5.42447111e-03 4.71341610e-03 -9.23852995e-03
8.90769251e-03 5.24031650e-03 5.27720852e-03 5.26314508e-03
6.20147912e-03 3.62612633e-03 4.85892594e-03 -2.66220560e-03]
[ -6.73649739e-03 -2.59472057e-04 5.75539097e-03 6.66894065e-03
1.10127367e-02 2.46753707e-03 -2.99500511e-03 -3.73128545e-03
-5.83201367e-03 -4.31951787e-03 1.44616829e-03 -6.58686040e-03
4.14082780e-03 1.14090310e-03 -8.29242985e-04 5.53416228e-03
-4.11105895e-04 2.87892064e-03 3.62366205e-04 -7.94248248e-04]
[ -5.54567296e-03 1.15430041e-03 3.27830086e-03 4.12886823e-03
6.78183092e-03 1.79559551e-03 -1.80174352e-03 -3.33251758e-03
-5.29490225e-03 -3.05411895e-03 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
[[ -4.98074247e-03 9.01466759e-04 3.40987043e-03 -3.25349579e-03
9.21981584e-04 5.99770434e-03 1.67222356e-03 2.20844080e-03
4.45439760e-03 -3.40889138e-03 7.48059654e-04 -7.22813362e-04
-8.83788511e-04 -6.78786746e-05 2.53343279e-03 6.05521607e-04
-1.31173420e-03 2.08991882e-03 -1.15431065e-03 2.35650165e-04]
[ -3.34386993e-03 1.24489667e-03 1.97105715e-03 -2.06982507e-03
9.56661941e-04 4.27589752e-03 9.54369374e-04 1.84580882e-03
2.93672620e-03 -2.59263976e-03 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[ -2.26694648e-03 1.35568588e-03 1.10661483e-03 -1.33866596e-03
8.82549793e-04 3.03406548e-03 4.88151883e-04 1.53438631e-03
1.89515646e-03 -2.01789290e-03 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]