Keras 笔记之Mask层

keras 的Mask层
先看下官方文档的解释

个人博客地址:http://xurui.club/

Masking层
keras.layers.core.Masking(mask_value=0.0)
使用给定的值对输入的序列信号进行“屏蔽”,用以定位需要跳过的时间步

对于输入张量的时间步,即输入张量的第1维度(维度从0开始算,见例子),如果输入张量在该时间步上都等于mask_value,则该时间步将在模型接下来的所有层(只要支持masking)被跳过(屏蔽)。

如果模型接下来的一些层不支持masking,却接受到masking过的数据,则抛出异常。

例子
考虑输入数据x是一个形如(samples,timesteps,features)的张量,现将其送入LSTM层。因为你缺少时间步为3和5的信号,所以你希望将其掩盖。这时候应该:

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

在LSTM层之前插入mask_value=0.的Masking层

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

在用LSTM等模型处理文本数据时,因为文本是变长的,所以在处理的过程中,要先进行长度的统一。常用的方法为
X_data = sequence.pad_sequence(maxlen=10,value=0,padding='post')
此步骤将X_data统一长度为10.
如[1,2,3,4,5]–>变为[1,2,3,4,5,0,0,0,0,0]
这样就可以把X_data 输入到model的Embedding等层。
然而,交给LSTM处理时,还有对数据进行反padding.也就是把后面的0去掉。
这个时候就是Mask层派上用场的时候了。Mask(0)经过Mask后,可以忽略X_data中所有的0,当然,把后面补的0去掉是可以理解的。那如果句中有0呢?一般情况下,如文本处理,会把文本映射成index,这样最大的好处就是节约空间。有些大文本数据,几百个G,经过了index映射,也就还剩几个G。这是题外话了,我们在keras的Embedding层会讲的。而这个时候index中的0,往往是一些无法转成词向量的低频词,这些词没有词向量,去掉对整个文本的处理也没有影响,所以在Mask中和补上的0一起忽略就好啦。
这里的忽略是什么意思呢?也就是不处理。
很多朋友以为Mask后会直接把0去掉。其实不是的。
可以做一些实验,如model的Mask后接个LSTM层,对LSTM输出每个时间步的值,发现,如果设置了Mask层,则上面[1,2,3,4,5,00000]的数据处理结果,前5位是经过了计算,补0的对应的位置的值,和第5位的值相同,也就是说LSTM对后面补0的位置并没有计算。

  • 14
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值