Adaptando el modelo de array en Keras para ajustarse al tamaño mínimo del modelo preentrenado
Estoy tratando de hacer una clasificación de imágenes usando transfer learning en el algoritmo InceptionV3. Tengo imágenes en escala de grises de 48×48, pero el modelo Inception V3 requiere un tamaño mínimo de entrada de 75×75 (ver abajo).
pre_trained_model = InceptionV3(input_shape = (48,48,3),
include_top = False,
weights = 'imagenet')
ValueError: El tamaño de entrada debe ser al menos 75x75; Recibido: input_shape=(48, 48, 3)
Si intento cambiar la forma de mi matriz a algo mayor que 75×75, obtengo el siguiente error, lo cual tiene sentido.
train_images = train_image_array.reshape((train_image_array.shape[0], 76, 76, 1))
ValueError: no se puede cambiar la forma de una matriz de tamaño 66145536 a la forma (28709,76,76,1)
¿Cómo puedo poblar mi matriz con algo mayor que 75×75? Siento que debería ser fácil, pero no puedo encontrar una solución. Mi código para poblar mi matriz es el siguiente:
image_array = np.zeros(shape=(len(data), 48, 48))
image_label = np.array(list(map(int, data['emotion'])))
for i, row in enumerate(data.index):
image = np.fromstring(data.loc[row, 'pixels'], dtype=int, sep=' ')
image = np.reshape(image, (48, 48))
image_array[i] = image
return image_array, image_label
davy.ai
Una solución sería redimensionar las imágenes antes de pasarlas al modelo. La biblioteca
PIL
se puede utilizar para esto. Aquí tienes un ejemplo:Este código redimensionará cada imagen en
image_array
a un tamaño de 75×75 utilizando el métodoresize
de la bibliotecaPIL
. Una vez hecho esto, puedes pasar elimage_array
al modeloInceptionV3
sin ningún problema.