Skip to content

joshua0231234/IA-De-cambio-de-celcuis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

IA-De-cambio-de-celcuis

Ia de cambio de f a c import tensorflow as tf import tensorflow_datasets as tfds

#Descargar set de datos de Fashion MNIST de Zalando datos, metadatos = tfds.load('fashion_mnist', as_supervised=True, with_info=True)

#Imprimir los metadatos para ver que trae el set metadatos

#Obtenemos en variables separadas los datos de entrenamiento (60k) y pruebas (10k) datos_entrenamiento, datos_pruebas = datos['train'], datos['test']

#Etiquetas de las 10 categorias posibles nombres_clases = metadatos.features['label'].names

nombres_clases

['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

#Funcion de normalizacion para los datos (Pasar de 0-255 a 0-1) #Hace que la red aprenda mejor y mas rapido def normalizar(imagenes, etiquetas): imagenes = tf.cast(imagenes, tf.float32) imagenes /= 255 #Aqui lo pasa de 0-255 a 0-1 return imagenes, etiquetas

#Normalizar los datos de entrenamiento y pruebas con la funcion que hicimos datos_entrenamiento = datos_entrenamiento.map(normalizar) datos_pruebas = datos_pruebas.map(normalizar)

#Agregar a cache (usar memoria en lugar de disco, entrenamiento mas rapido) datos_entrenamiento = datos_entrenamiento.cache() datos_pruebas = datos_pruebas.cache()

#Mostrar una imagen de los datos de pruebas, de momento mostremos la primera for imagen, etiqueta in datos_entrenamiento.take(1): break imagen = imagen.numpy().reshape((28,28)) #Redimensionar, cosas de tensores, lo veremos despues

import matplotlib.pyplot as plt

#Dibujar dibujar plt.figure() plt.imshow(imagen, cmap=plt.cm.binary) plt.colorbar() plt.grid(False) plt.show()

#Dibujar mas plt.figure(figsize=(10,10)) for i, (imagen, etiqueta) in enumerate(datos_entrenamiento.take(25)): imagen = imagen.numpy().reshape((28,28)) plt.subplot(5,5,i+1) plt.xticks([]) plt.yticks([]) plt.grid(False) plt.imshow(imagen, cmap=plt.cm.binary) plt.xlabel(nombres_clases[etiqueta]) plt.show()

#Crear el modelo modelo = tf.keras.Sequential([ tf.keras.layers.Flatten(input_shape=(28,28,1)), #1 - blanco y negro tf.keras.layers.Dense(50, activation=tf.nn.relu), tf.keras.layers.Dense(50, activation=tf.nn.relu), tf.keras.layers.Dense(10, activation=tf.nn.softmax) #Para redes de clasificacion ])

#Compilar el modelo modelo.compile( optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=['accuracy'] )

#Los numeros de datos en entrenamiento y pruebas (60k y 10k) num_ej_entrenamiento = metadatos.splits["train"].num_examples num_ej_pruebas = metadatos.splits["test"].num_examples

print(num_ej_entrenamiento) print(num_ej_pruebas)

60000 10000

#El trabajo por lotes permite que entrenamientos con gran cantidad de datos se haga de manera mas eficiente TAMANO_LOTE = 32

#Shuffle y repeat hacen que los datos esten mezclados de manera aleatoria para que la red #no se vaya a aprender el orden de las cosas datos_entrenamiento = datos_entrenamiento.repeat().shuffle(num_ej_entrenamiento).batch(TAMANO_LOTE) datos_pruebas = datos_pruebas.batch(TAMANO_LOTE)

import math

#Entrenar historial = modelo.fit(datos_entrenamiento, epochs=5, steps_per_epoch= math.ceil(num_ej_entrenamiento/TAMANO_LOTE))

#Ver la funcion de perdida plt.xlabel("# Epoca") plt.ylabel("Magnitud de pérdida") plt.plot(historial.history["loss"])

[<matplotlib.lines.Line2D at 0x7f037024aad0>]

#Pintar una cuadricula con varias predicciones, y marcar si fue correcta (azul) o incorrecta (roja) import numpy as np

for imagenes_prueba, etiquetas_prueba in datos_pruebas.take(1): imagenes_prueba = imagenes_prueba.numpy() etiquetas_prueba = etiquetas_prueba.numpy() predicciones = modelo.predict(imagenes_prueba)

def graficar_imagen(i, arr_predicciones, etiquetas_reales, imagenes): arr_predicciones, etiqueta_real, img = arr_predicciones[i], etiquetas_reales[i], imagenes[i] plt.grid(False) plt.xticks([]) plt.yticks([])

plt.imshow(img[...,0], cmap=plt.cm.binary)

etiqueta_prediccion = np.argmax(arr_predicciones) if etiqueta_prediccion == etiqueta_real: color = 'blue' else: color = 'red'

plt.xlabel("{} {:2.0f}% ({})".format(nombres_clases[etiqueta_prediccion], 100*np.max(arr_predicciones), nombres_clases[etiqueta_real]), color=color)

def graficar_valor_arreglo(i, arr_predicciones, etiqueta_real): arr_predicciones, etiqueta_real = arr_predicciones[i], etiqueta_real[i] plt.grid(False) plt.xticks([]) plt.yticks([]) grafica = plt.bar(range(10), arr_predicciones, color="#777777") plt.ylim([0, 1]) etiqueta_prediccion = np.argmax(arr_predicciones)

grafica[etiqueta_prediccion].set_color('red') grafica[etiqueta_real].set_color('blue')

filas = 5 columnas = 5 num_imagenes = filascolumnas plt.figure(figsize=(22columnas, 2filas)) for i in range(num_imagenes): plt.subplot(filas, 2columnas, 2i+1) graficar_imagen(i, predicciones, etiquetas_prueba, imagenes_prueba) plt.subplot(filas, 2columnas, 2i+2) graficar_valor_arreglo(i, predicciones, etiquetas_prueba)

#Probar una imagen suelta imagen = imagenes_prueba[4] #AL ser la variable imagenes_prueba solo tiene lo que se le puso en el bloque anterior heheh imagen = np.array([imagen]) prediccion = modelo.predict(imagen)

print("Prediccion: " + nombres_clases[np.argmax(prediccion[0])])

Prediccion: Sandal

#Exportacion del modelo a h5 modelo.save('modelo_exportado.h5')

#Instalar tensorflowjs para convertir el h5 a un modelo que pueda cargar tensorflowjs en un explorador !pip install tensorflowjs

#Convertir el archivo h5 a formato de tensorflowjs !mkdir tfjs_target_dir !tensorflowjs_converter --input_format keras modelo_exportado.h5 tfjs_target_dir

2021-07-17 02:57:45.147570: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0

#Veamos si si creo la carpeta !ls

modelo_exportado.h5 sample_data tfjs_target_dir

#Veamos el contenido de la carpeta !ls tfjs_target_dir

group1-shard1of1.bin model.json

About

Ia de cambio de f a c

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published