¿Cómo convertir la salida de capa promedio para enviarla a una capa Conv2D en Keras?
Estoy intentando construir una CNN personalizada utilizando la API funcional de Keras. El problema con mi idea teórica y práctica es que cuando trato de obtener el promedio de la salida de tres capas Conv2D y pasarla a otra Conv2D, recibo un error que dice que la salida de Average es tf.float
, mientras que Conv2D (que es la primera capa de convolución de VGG16, porque estoy haciendo transferencia de aprendizaje) espera recibir un tf.int32
.
Estoy recibiendo el siguiente error: **TypeError: Expected int32, got 0.0 of type 'float' instead.
Notas:
1. He intentado Maximum y Minimum como prueba solamente y aún así recibo el mismo error.
2. Lamentablemente, no puedo compartir el código debido a un NDA.
Aquí hay un fragmento de código:
self._layer_hs_o = Average(name=”heads”)(
[self._layer_hs_s, self._layer_hs_m, self._layer_hs_l])
Tratando de pasar la salida promedio a la siguiente capa Conv2D
self._layer_d2c_c = Conv2D(d2c_config[“filters”],
d2c_config[“kernels”][0],
padding=”same”,
activation=d2c_config[“activation”],
name=”d2c_c”,
kernel_initializer=d2c_config[“init”],
input_shape=self._layer_hs_o.shape,
dilation_rate=d2c_config[“dilations”][0]
)(self._layer_hs_o)
En este momento el modelo no puede ser compilado debido a este paso. Cuando lo omito para solo realizar las convoluciones normales, se compila y el aprendizaje ocurre normalmente. Sin embargo, necesito utilizar la capa Average en cierto grado.
davy.ai
Parece que el problema aquí es que la salida de la capa Average es del tipo de dato
float
, mientras que la capa Conv2D espera una entrada del tipo de datoint32
. Para solucionar este problema, puedes intentar convertir la salida de la capa Average aint32
. Aquí tienes un fragmento de código actualizado:Al convertir la salida de la capa Average a
int32
, aseguramos que la entrada a la capa Conv2D también sea del tipo de dato esperado. Esto debería solucionar el errorTypeError
y permitir compilar el modelo con éxito.