CNN 中通道的最大池化
maxpooling of channels in CNN
我需要减少 CNN 网络中的通道数。我的输入是一个 4D 对象(样本、行、列、通道)。通道数为 3,我的训练输出只有一个通道。无论如何在训练期间在通道方向上进行某种最大池化?
提前致谢
您可以遵循几个选项,对通道求和,取最大通道,进行标准的 RGB 到黑白转换等。
所有这些都可以在 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,:,:]
。
我需要减少 CNN 网络中的通道数。我的输入是一个 4D 对象(样本、行、列、通道)。通道数为 3,我的训练输出只有一个通道。无论如何在训练期间在通道方向上进行某种最大池化?
提前致谢
您可以遵循几个选项,对通道求和,取最大通道,进行标准的 RGB 到黑白转换等。
所有这些都可以在 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,:,:]
。