问题描述我在用Keras的Embedding层做nlp相关的实现时,发现了一个神奇的问题,先上代码:a=Input(shape=[15])#None*15b=Input(shape=[30])#None*30emb_a=Embedding(10,5,mask_zero=True)(a)#None*15*5emb_b=Embedding(20,5,mask_zero=False)(b)#None*30*5cat=Concatenate(axis=1)([emb_a,emb_b])#None*45*5model=Model(inputs=[a,b],outputs=[cat])printmodel.summary()我有两个Embedding层,当其中...
继续阅读 >
分类:masking
2020
10-08
10-08
Keras实现支持masking的Flatten层代码
不知道为什么,我总是需要实现某种骚操作,而这种骚操作往往是Keras不支持的。例如,我有一个padding过的矩阵,那么它一定是带masking的,然后我想要把它Flatten,再输入到Dense层。然而Keras的Flatten层不支持masking。Keras原本Flatten的实现classFlatten(Layer):def__init__(self,**kwargs):super(Flatten,self).__init__(**kwargs)self.input_spec=InputSpec(min_ndim=3)defcompute_output_shape(self,input_sha...
继续阅读 >
2020
10-08
10-08
Keras自定义实现带masking的meanpooling层方式
Keras确实是一大神器,代码可以写得非常简洁,但是最近在写LSTM和DeepFM的时候,遇到了一个问题:样本的长度不一样。对不定长序列的一种预处理方法是,首先对数据进行padding补0,然后引入keras的Masking层,它能自动对0值进行过滤。问题在于keras的某些层不支持Masking层处理过的输入数据,例如Flatten、AveragePooling1D等等,而其中meanpooling是我需要的一个运算。例如LSTM对每一个序列的输出长度都等于该序列的长度,那么均值...
继续阅读 >