Pop

Curso Tensorflow con Anaconda -20 Creando nuestros propio clasificador de imágenes (2)

20 Nuestros propio clasificador de imágenes (2)

  • Hola a todos.Una vez finalizado el curso de google nos disponemos a crear nuestro propio clasificador de imágenes.En esta segunda entrada veremos en detalle el código implementado para poder entrenar nuestro modelo.
  • Os dejo un vídeo donde explico que hace el código implementado con el objetivo de clasificar nuestros conjuntos de imágenes de perros y de gatos que descargamos en el capítulo anterior:
  • Os dejo el código visto en el vídeo:
 
#importamos librerias necesarias
import sys
from PIL import Image
sys.modules['Image'] = Image 
import os
from tensorflow.python.keras import optimizers #libreria optimizadores para entrenar modelo
from tensorflow.python.keras.preprocessing.image import ImageDataGenerator # libreria prepocesa imagenes
from tensorflow.python.keras.layers import Dropout, Flatten, Dense, Activation # Libreria para las capas
from tensorflow.python.keras.layers import  Convolution2D, MaxPooling2D #capas donde hacemos convuliones
from tensorflow.python.keras.models import Sequential # libreria para redes neuronales secuenciales
from tensorflow.python.keras import backend as K 
from tensorflow.python.keras import applications


K.clear_session() # limpiamos por si hubiera algo corriendo
datosEntrenamiento = './imagenes/entrenamiento' #ruta imagenes enetrenamiento
datosValidacion = './imagenes/validacion' # ruta imagenes validacion

longitud, altura = 224, 224 
#longitud y altura de las imagenes.Le pongo 224 en el ancho y alto porque es lo que se espera el
 #el modelo preentrenado
    
#reescalamos las imágenes para que los valores en vez de ir de 1 a 255(posibles valores pixel) vayan de 0 a 1.
#shear_range--> inclina imágenes
#horizontal_flip --> invierte imágenes
entDatagen = ImageDataGenerator(rescale=1. / 255,shear_range=0.2,zoom_range=0.2,horizontal_flip=True)

#en el grupo de validación simplemente reescalamos
validacionDatagen = ImageDataGenerator(rescale=1. / 255)

#carga las imágenes de entrenammiento y las procesa según la altura pasada y las clasifica en modo el modo categorical
Entrenamiento = entDatagen.flow_from_directory(datosEntrenamiento,
                                                  target_size=(altura, longitud),batch_size=32,class_mode='categorical')

#carga las imágenes de validación y las procesa según la altura pasada y las clasifica en modo el modo categorical
Validacion = validacionDatagen.flow_from_directory(datosValidacion,
                                                             target_size=(altura, longitud),
                                                              batch_size=32, class_mode='categorical')
#cargamo el modelo preentrenado
vgg=applications.vgg16.VGG16()
#vgg=applications.vgg16.VGG16()# Ejemplo del modelo
cnn=Sequential()

#cargamos las capas del modelo preentrenado en nuestro modelo secuencial y quitamos la última capa
for capa in vgg.layers:
    cnn.add(capa)
cnn.layers.pop()

#queremos que solo se entrenna la capa que añadimos nosotros asi que le decimos  layer.trainable=False
for layer in cnn.layers:
    layer.trainable=False

#añadimos nuestra capa
cnn.add(Dense(2,activation='softmax'))

#compilamos nuestro modelo utilizando el optimizado de Adam
cnn.compile(loss='categorical_crossentropy',
            optimizer=optimizers.Adam(lr=0.0004),
            metrics=['accuracy'])

#utilizamos la función v para entrenar el algoritmo
cnn.fit_generator(Entrenamiento,steps_per_epoch=100,epochs=20,validation_data=Validacion,validation_steps=300)

#una vez entreando guardamos nuestro modelo
cnn.save('./modelo/modelo.h5')
cnn.save_weights('./modelo/pesos.h5')

    

import numpy as np
from tensorflow.keras.preprocessing.image import load_img, img_to_array
from tensorflow.python.keras.models import Sequential # libreria para redes neuronales secuenciales
from tensorflow.keras.models import load_model
from tensorflow.python.keras import applications
from tensorflow.python.keras.layers import  Dense

longitud, altura = 224, 224
weights_model='./modelo/pesos.h5'  
vgg=applications.vgg16.VGG16()
cnn=Sequential()
for capa in vgg.layers:
    cnn.add(capa)
cnn.layers.pop()
for layer in cnn.layers:
    layer.trainable=False
cnn.add(Dense(2,activation='softmax'))  

cnn.load_weights(weights_model)

def predict(file):
  x = load_img(file, target_size=(longitud, altura))
  x = img_to_array(x)
  x = np.expand_dims(x, axis=0)
  array = cnn.predict(x)
  result = array[0]
  answer = np.argmax(result)
  if answer == 0:
    print("Gato")
  elif answer == 1:
    print("Perro")

  return answer

No hay comentarios:

Publicar un comentario

Curso .NET Core en C# - 34.Creamos nuestro propio log

34.Creamos nuestro propio log Hola a todos. En este curso, analizaremos todos los conceptos básicos, intermedios y avanzados de  ASP.NET...