¿Cómo hacer convolución con activación de maxout?

Quiero que mi función de activación seleccione el valor máximo, generado por N filtros de M x M convolución. Esta capa convertiría la imagen del canal X a 1 canal uno.

¿Como hacer eso?

Primero escribi

 classifier.add(Conv2D(3, (5, 5), activation='linear') classifier.add(MaxPooling2D(pool_size=1, strides=1)) 

pero luego pensó que no devuelve la imagen de 1 canal, sino que devuelve 3 canales.

¿Cómo hacer el trabajo?

Entonces, para aplicar esto, deberías crear una capa Lambda y max desde el Backend:

 from keras import backend as K if K.image_data_format() == "channels_first": channels_axis = 1 else: channels_axis = 3 # To apply MaxOut: classifier.add(Lambda(lambda x: K.max(x, axis=channels_axis, keepdims=True))) 

Puede usar keras.backend.max y asignarle el argumento de axis para llevar el máximo a lo largo del eje correcto. Cuál depende de tu backend.

Esta no es una respuesta directa, pero si solo desea que el resultado sea 1 canal, puede crear una capa convolucional con un solo filtro. Puede agregarlo después de su convolución existente, o simplemente cambiar su convolución existente.

 classifier.add(Conv2D(1, (5,5),....))