我需要减少 CNN 网络中的频道数量。我的输入是一个 4D 对象(样本、行、列、通道)。通道数为 3,我的训练输出只有一个通道。无论如何在训练期间在通道方向上进行最大池化?
提前致谢
我需要减少 CNN 网络中的频道数量。我的输入是一个 4D 对象(样本、行、列、通道)。通道数为 3,我的训练输出只有一个通道。无论如何在训练期间在通道方向上进行最大池化?
提前致谢
您可以遵循一些选项,对通道求和,获取最大通道,将标准 RGB 转换为 B&W 等。
所有这些都可以在Lambda
层内使用,并具有定义的功能:
import keras.backend as K
def channelPool(x):
return K.sum(x,axis=-1)
#or
return K.mean(x,axis=-1)
#or
return K.max(x,axis=-1)
#or
return (.21*x[:,:,:,:1]) + (0.72*x[:,:,:,1:2]) + (0.07*x[:,:,:,-1:])
该层将是:
Lambda(channelPool, output_shape=optionalInTensorflow)
PS:如果您使用“channels_first”,则轴将为1
,而变换将采用x[:,channel,:,:]
。