我想在CNN中添加一个全局时间池,它有三种不同的池函数:mean,maximum和L2-norm。 Keras具有平均和最大池功能,但我还没能找到L2的一个。我怎么能自己实现呢?
答案 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 ) 。这是定位到目标单元格中的数字。