如何在Keras实现L2规范池?

时间:2017-05-02 01:48:18

标签: keras pooling

我想在CNN中添加一个全局时间池,它有三种不同的池函数:mean,maximum和L2-norm。 Keras具有平均和最大池功能,但我还没能找到L2的一个。我怎么能自己实现呢?

2 个答案:

答案 0 :(得分:0)

我也在寻找这个,在keras中没有开箱即用的游泳池。 但您可以使用Lambda Layer

实现它
from keras.layers import Lambda
import keras.backend as K

def l2_norm(x):
    x = x ** 2
    x = K.sum(x, axis=1)
    x = K.sqrt(x)
    return x
global_l2 = Lambda(lambda x: l2_norm(x))(previous_layer)

答案 1 :(得分:0)

我一直在搜索,关于如何计算池的信息很少。如果有人对实现它感兴趣,请参见以下比较:

Max Pooling:从正在评估的NxM单元中获取最大值,并将其作为该单元位置下采样矩阵的值。

平均池化:与上面类似,而不是最大值,而是获取单元格内所有值的平均值

L2-范数合并:与上述相似,而不是平均值,计算单元格中数字的L2-范数,然后在目标降采样矩阵中使用此数字。假设我们得到一个2x2的单元格(内核大小),它是四个数字。现在假设这四个数字是1,2,3,4。 L2-范数将为sqrt(sum(1 2 + 2 2 + 3 2 + 4 2 ) 。这是定位到目标单元格中​​的数字。