如何用Keras自定义实现带有masking功能的meanpooling层?

2026-05-24 21:240阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1058个文字,预计阅读时间需要5分钟。

如何用Keras自定义实现带有masking功能的meanpooling层?

Keras是一大神器,代码简洁易读。但在写LSTM和DeepFM时,遇到一个问题:样本长度不一。对不定长序列的一种预处理方法是,先对数据进行padding。

Keras确实是一大神器,代码可以写得非常简洁,但是最近在写LSTM和DeepFM的时候,遇到了一个问题:样本的长度不一样。对不定长序列的一种预处理方法是,首先对数据进行padding补0,然后引入keras的Masking层,它能自动对0值进行过滤。

问题在于keras的某些层不支持Masking层处理过的输入数据,例如Flatten、AveragePooling1D等等,而其中meanpooling是我需要的一个运算。例如LSTM对每一个序列的输出长度都等于该序列的长度,那么均值运算就只应该除以序列长度,而不是padding后的最长长度。

例如下面这个 3x4 大小的张量,经过补零padding的。我希望做axis=1的meanpooling,则第一行应该是 (10+20)/2,第二行应该是 (10+20+30)/3,第三行应该是 (10+20+30+40)/4。

Keras如何自定义层

如何用Keras自定义实现带有masking功能的meanpooling层?

在 Keras2.0 版本中(如果你使用的是旧版本请更新),自定义一个层的方法参考这里。具体地,你只要实现三个方法即可。

build(input_shape) : 这是你定义层参数的地方。

阅读全文
标签:meanp

本文共计1058个文字,预计阅读时间需要5分钟。

如何用Keras自定义实现带有masking功能的meanpooling层?

Keras是一大神器,代码简洁易读。但在写LSTM和DeepFM时,遇到一个问题:样本长度不一。对不定长序列的一种预处理方法是,先对数据进行padding。

Keras确实是一大神器,代码可以写得非常简洁,但是最近在写LSTM和DeepFM的时候,遇到了一个问题:样本的长度不一样。对不定长序列的一种预处理方法是,首先对数据进行padding补0,然后引入keras的Masking层,它能自动对0值进行过滤。

问题在于keras的某些层不支持Masking层处理过的输入数据,例如Flatten、AveragePooling1D等等,而其中meanpooling是我需要的一个运算。例如LSTM对每一个序列的输出长度都等于该序列的长度,那么均值运算就只应该除以序列长度,而不是padding后的最长长度。

例如下面这个 3x4 大小的张量,经过补零padding的。我希望做axis=1的meanpooling,则第一行应该是 (10+20)/2,第二行应该是 (10+20+30)/3,第三行应该是 (10+20+30+40)/4。

Keras如何自定义层

如何用Keras自定义实现带有masking功能的meanpooling层?

在 Keras2.0 版本中(如果你使用的是旧版本请更新),自定义一个层的方法参考这里。具体地,你只要实现三个方法即可。

build(input_shape) : 这是你定义层参数的地方。

阅读全文
标签:meanp