Keras中Masking和padding的使用

       Keras中用于masking以及padding的两个函数分别是keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32', padding='pre', truncating='pre', value=0.0)以及keras.layers.Masking(mask_value=0.0)
       pad_sequences用于将序列填充到相同的长度。可以将一个由num_samples个序列(每个序列又是一个整数的列表,每个数字对应词典中的词的ID)构成的列表转化为一个形状为(num_samples, num_timesteps)的二维numpy数组。num_timesteps这个量可以由参数maxlen来控制;如果maxlen为None,那么num_timesteps默认为原来的序列当中最长那个序列的长度。相应的,如果序列长度小于num_timesteps,那么就在其后填充0直到长度为num_timesteps。如果序列长于num_timesteps,将会被削短。填充或者是削短的位置由参数padding和truncating的值来控制,默认填充位置在序列开始位置之前。
       几个传入参数的说明:
       sequences: List of lists, where each element is a sequence.
       maxlen: Int, maximum length of all sequences.
       dtype: Type of the output sequences. To pad sequences with variable length strings, you can use object.
       padding: String, 'pre' or 'post': pad either before or after each sequence.
       truncating: String, 'pre' or 'post': remove values from sequences larger than maxlen, either at the beginning or at the end of the sequences.
       value: Float or String, padding value.
       举一个简单的例子:

input:
seqs = [[1,2,3,4],[2,3,4,5,6,6,6]] # list of integar lists

op:
K.preprocessing.sequence.pad_sequences(a, maxlen=10, dtype='int32', padding='pre', truncating='pre', value=0.0)

output:
array([[0, 0, 0, 0, 0, 0, 1, 2, 3, 4],[0, 0, 0, 2, 3, 4, 5, 6, 6, 6]])

       keras.layers.Masking(mask_value=0.0)是用于对值为指定值的位置进行掩蔽的操作,以忽略对应的timestep。在输入张量的每个时刻(即输入张量的第一个维度),如果输入张量在这一时刻的所有值都等于指定的mask_value,那么这一时刻将会在接下来的下游层都会被跳过(只要其支持masking操作)。如果下游层不支持masking操作,那么就会报错。
       举例如下:考虑一个numpy数据x,其具有(samples, timesteps, features)的形状。这组数据将会被送入到LSTM层中。由于数据缺乏,想要掩蔽第三个和第五个时刻,首先应当将数据操作如下:

x[:, 3, :] = 0.
x[:, 5, :] = 0.

然后,在原来的基础上添加掩蔽层:

model = Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(LSTM(32))

你可能感兴趣的:(Keras中Masking和padding的使用)