Para que cada aplicación de aprendizaje de la máquina funcione, se requieren datos. En las tareas tradicionales de ML (aprendizaje automático) que se ocupan de registros, filas o tuplas, los usuarios pueden leer los datos directamente en la matriz NumPy o en el marco de datos de Pandas (en el caso de un ecosistema de pitones, puede ser diferente para otros idiomas como el R). Los datos de las imágenes no pueden ser leídos directamente y convertidos en tensores. Sin embargo, Keras proporciona métodos incorporados que pueden realizar esta tarea fácilmente. A continuación se muestra el código para leer los datos de imagen de los directorios del tren y de la prueba.
12345678910111213141516171819202122from tensorflow import kerasfrom keras_preprocessing import imagefrom keras_preprocessing.image import ImageDataGeneratortrain_datagen = ImageDataGenerator( resale=1./255, rotation_range=20, width_shift_range=0.15, height_shift_range=0.15, shear_range=0.15, zoom_range=0. 15, giro_horizontal=Verdad, modo de llenado=$0027más cercano$0027)test_datagen = ImageDataGenerator(rescale=1./255)train_generator = train_datagen. flow_from_directory("D:\dogs-vs-cats_train", target_size=(150,150), batch_size=20, class_mode=$0027binary$0027)validation_generator = test_datagen.flow_from_directory("D:dogs-vs-cats_validation", target_size=(150,150), batch_size=20,class_mode=$0027binary$0027)
pitón
El fragmento anterior toma los datos de la imagen del directorio de trenes (dogs-vs-cats_train) y del directorio de validación (dogs-vs-cats_validation) y reajusta los valores de los píxeles dividiéndolos por 255. También redimensiona todas las imágenes al tamaño de 150X150, independientemente del tamaño original de la imagen presente en el directorio de trenes o de validación. También cabe señalar que train_datagen contiene argumentos adicionales que test_datagen. Esto se hace ]para realizar el aumento de datos. El aumento de datos es el proceso de crear más datos de entrenamiento basados en los datos de entrenamiento ya existentes. En el recorte anterior, las imágenes existentes se voltean, se cortan, se hacen zoom, se desplazan y se giran para añadir más entrenamiento en los datos y evitar el sobreajuste.
Redes Neuronales Convolucionales (CNN)
Las redes neuronales convolucionales difieren de las redes densas tradicionales en la forma en que son extremadamente eficaces en el reconocimiento de imágenes y la visión por computadora. Uno de los aspectos de las CNN que las hacen tan poderosas es que pueden aprender los patrones en una parte de la pantalla y aplicarlos en cualquier otra parte. Esto está en claro contraste con el de las tradicionales redes densas. Por ejemplo, una CNN puede aprender el patrón de la oreja del gato en la esquina superior derecha de la pantalla (imagen) y aplicarlo en cualquier otra parte de la pantalla para las nuevas imágenes que llegan. Otro aspecto de la CNN que le añade su singularidad, junto con su poder, es que puede aprender de las jerarquías de los patrones. Por ejemplo, la primera capa puede aprender el patrón de los bordes, mientras que la capa siguiente puede aprender la textura, y así sucesivamente. Además, es fácil definir el número de filtros que el usuario quiere de cada una de las capas convolucionales. Los filtros pueden ser pensados como un concepto individual que la red puede aprender. Por ejemplo, un concepto de alto nivel puede estar presente de ojos, orejas, piernas, etc.
123456789101112131415model = keras.Sequential([ keras.layers.Conv2D(32,(3,3), activation=$0027relu$0027, input_shape=(150,150,3)), keras.layers. MaxPool2D((2,2)), keras.layers.Conv2D(64,(3,3),activation=$0027relu$0027), keras.layers.MaxPool2D(2,2), keras.layers.Conv2D(128,(3,3), activation=$0027relu$0027), keras. layers.MaxPool2D(2,2), keras.layers.Conv2D(128,(3,3), activation=$0027relu$0027), keras.layers.MaxPool2D(2,2), keras.layers.Flatten(), keras.layers.Dropout(0,5), keras.layers.Dense(512, activation=$0027relu$0027), keras.layers.Dense(1, activation=$0027sigmoid$0027)])model.summary()
pitón
La primera capa de Conv2D los parches de 3X3 se mapean y determinan 32 filtros sobre la entrada. De manera similar, la segunda capa de Conv2D calcula 64 filtros y la tercera capa de Conv2D calcula 128 filtros.
Operación de mapeo
Generalmente, las CNN están acompañadas por una operación de Maxpooling. La operación principal de Maxpooling es reducir la muestra de los mapas de características. El Maxpooling generalmente procede después de cada capa convolucional y reduce la dimensionalidad de las imágenes. No es un atributo necesario, pero es una forma eficaz de hacer que los modelos sean eficientes y aumentar su poder de predicción. El siguiente cuadro ofrece un resumen del modelo creado hasta ahora.
Salida
123456789101112131415161718192021222324252627282930_________________________________________________________________Capa (tipo) Parámetro de la forma de salida #=============================================================================conv2d (Conv2D) (Ninguno, 148, 148, 32) 896_________________________________________________________________max_pooling2d (MaxPooling2D) (Ninguno, 74, 74, 32) 0_________________________________________________________________conv2d_1 (Conv2D) (Ninguno, 72, 72, 64) 18496_________________________________________________________________max_pooling2d_1 (MaxPooling2 (Ninguno, 36, 36, 64) 0_________________________________________________________________conv2d_2 (Conv2D) (Ninguno, 34, 34, 128) 73856_________________________________________________________________max_pooling2d_2 (MaxPooling2 (Ninguno, 17, 17, 128) 0_________________________________________________________________conv2d_3 (Conv2D) (Ninguno, 15, 15, 128) 147584_________________________________________________________________max_pooling2d_3 (MaxPooling2 (Ninguno, 7, 7, 128) 0_________________________________________________________________flatten (Flatten) (Ninguno, 6272) 0_________________________________________________________________de abandono (Dropout) (Ninguno, 6272) 0_________________________________________________________________denso (Dense) (Ninguno, 3.453.121 Parámetros entrenables: 3.453.121 Parámetros no entrenables: 0