Tu primera red neuronal con Keras

4/28
Recursos

Aportes 30

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Si en google Colab reciben este error

ImportError: cannot import name 'to_categorical' from 'keras.utils'

se soluciona haciendo la importacion asi:

from tensorflow.keras.utils import to_categorical

Dividí el flujo de trabajo de la clase en 4 pasos:

  • Cargar las librerías a utilizar.
import numpy as np
from keras import layers, models
from keras.utils import to_categorical
from keras.datasets import mnist
import matplotlib.pyplot as plt
  • Cargar los datos y separarlos en datos de entrenamiento y prueba.
(train_data, train_labels), (test_data, test_labels) = mnist.load_data()
  • Cargar y configurar el modelo de la red neuronal.
model = models.Sequential()
model.add(layers.Dense(512, activation='relu', input_shape = (28*28,)))
model.add(layers.Dense(10,activation='softmax'))

model.compile(optimizer='rmsprop',
              loss='categorical crossentropy',
              metrics = 'accuracy')
  • Realizar una limpieza a los datos para un mejor procesamiento.
x_train = train_data.reshape((60000, 28*28))
x_train = x_train.astype('float32')/255

x_test = test_data.reshape((10000, 28*28))
x_test = x_test.astype('float32')/255

y_train = to_categorical(train_labels)
y_test = to_categorical(test_labels)

A mi me funcionó importar esto:

import numpy as np
from keras import layers, models
from tensorflow.keras.utils import to_categorical
from keras.datasets import mnist
import matplotlib.pyplot as plt

Espero les sea de utilidad.

En versiones más recientes de tensorflow aparece error, por lo recomiendo usar:

from tensorflow.keras import layers, models

El conjunto de datos MNIST, es ideal para aprender redes neuronales, se conforma de 60000 elementos para entrenar el modelo y 10000 adisionales para testearlo. El conjunto ha sido pre-normalizado para reducir su resolución mediante técnicas de anti-aliasing, y se centraron calculado el centro de masa para ser posicionadas en el campo de 28 x 28 píxeles.

Excelente , lo de cambiar el runtime hace verdaderamente una diferencia.

Hola! Agradezco si me pueden colaborar con cualquier info relacionada a crear mi propio dataset de imágenes del tema que me interese y poderles dar las dimensiones y formato que me convenga.

Me gustaría aportar una información acerca del porque los números de cada pixel de la imagen van del 0 al 255.

Lo anterior se debe gracias al tipo de codificación utilizada. Para las imágenes del dataset que estamos usando, están codificadas a 8 bits, eso significa que la cantidad de niveles de gris posibles son 2^8 = 256, por tanto el mínimo nivel es 0 (negro puro) y 255 (blanco puro). Es importante resaltar que existen imágenes a 16 bits (por ejm las imágenes médicas de mamografías), en este caso se tendría 2^16 = 65536 niveles de gris, que irían desde 0 (negro puro) hasta 65535 (blanco puro).

Visualmente hablando, podremos decir que se ve con mayor definición una imagen de 16 bits que de 8 dado que sus colores están representados por más escalas. A continuación dejo una imagen ilustrativa de los niveles de gris:

Si les falla

from keras.utils import to_categorical

es porque ahora Keras esta integrado en tensorflow y los imports son de la siguiente forma

from tensorflow.keras.utils import to_categorical
# Si necesitan visualizar el modelo
from keras.utils.vis_utils import plot_model
plot_model(model, to_file='model.png', show_shapes= True)

recuerden pueden ocupar jupyter desde VScode

Importar “from keras.utils import to_categorical”" ya no les funcionara debido a que ahora keras pertenece a tensor flow, por lo que tendrán que utilzar:
“from tensorflow.keras.utils import to_categorical”

De igual manera tendrán que importar keras

Si van seguir el cursos con anaconda y jupyter notebook, primero se debe instalar keras:

pip install keras 

#y luego tensorflow 

pip install tensorflow

si no ubican el porqué de esa cantidad de parámetros, la respuesta es la siguiente:
dense_1 = 512 (neuronas) x 784 (entrada inicial: 28x28) + 512 (términos de sesgo)
dense_2 = 10 (neuronas) x 512 (neuronas capa anterior) + 10 (términos de sesgo)

Hola, haciendo el ejercicio en colab, la línea de código n.°3 debe ser actualizada, porque si no, genera error. En vez de “from keras.utils import to_categorical”, hay que cambiarla por “from tensorflow.keras.utils import to_categorical”.

from tenserflow.keras.utils import to_categorical

muy interesante el dataframe

ReLu viene de: function Rectifier Linear Unit — ReLU
Este video esta muy bien explicado en el siguiente blog post y en ingles:
blog post

las imagenes manejan vectores del 1 al 253 por los colores

  • Librerias

    import pandas as pd
    from tensorflow.keras import layers, models
    from tensorflow.keras.utils import to_categorical
    from tensorflow.keras.datasets import mnist
    import matplotlib.pyplot as plt
    
  • Definir el espacio de entrenamiento y testeo

    (train_data, train_labels),(test_data, test_labels)=mnist.load_data()
    
    train_data.shape
    
  • Ver el dataset

    plt.imshow(train_data[0])
    train_labels[0]
    
  • Definicion del modelo

    model = models.Sequential()
    
    model.add(layers.Dense(512,activation='relu', input_shape=(28*28,)))
    model.add(layers.Dense(10,activation='softmax'))
    
    model.compile(optimizer='rmsprop',
                loss='categorical_crossentropy',
                metrics='accuracy')
    
    model.summary()
    
  • Mejorar el modelo

    x_train= train_data.reshape((60000, 28*28))
    x_train = x_train.astype('float32')/255
    
    x_test= test_data.reshape((10000, 28*28))
    x_test = x_train.astype('float32')/255
    
    y_train = to_categorical(train_labels)
    y_test = to_categorical(test_labels)
    
    train_labels[0]
    
    entrega
    
    5
    
    y_train[0]
    
    entrega
    
    array([0., 0., 0., 0., 0., 1., 0., 0., 0., 0.], dtype=float32)
    

Para los que se quedaron con la duda de que esone hot encoding, es un parámetro para que las combianciones permitidas dentro de un arreglo solo tenga un valor 1. Por ejemplo acepta la lista [0,0,1,0,0,0] pero rechazaría otra como [1,0,1,0,1,1]

#train_data  :NumPy array of grayscale image data with shapes (60000, 28, 28), containing the training data. Pixel values rangefrom 0 to 255.
#train_labels:NumPy array of digit labels (integers in range 0-9)with shape (60000,) for the training data.
#test_data   :Numpy array of grayscale image data with shapes(10000, 28, 28), containing the test data. Pixel values rangefrom 0 to 255
#test_labels :NumPy array of digit labels (integers in range 0-9)with shape (10000,) for the test data
(train_data, train_labels), (test_data, test_labels) = mnist.load_data()
#minist.lado_data (copia los datos a estos 4 arreglos mencioandos) 
<code> 
# importa una dataset de 60,000 imágenes de 28x 28 de los números del 1 al 10 
# Existen varios dataset en ruta /Keras/ APi reference / Buit-in Small dataset  como son numeros, imagenes, ropa ,bd imdbm precios de casas
from keras.datasets import mnist

¿Por qué los datos se inicializan de esa manera?

(train_data, train_labels), (test_data, test_labels) = mnist.load_data()

No entiendo la sintaxis

Gracias Carlos, se aprecia mucho que sepas que no se cosas😂

Otra manera de hacerlo es así:

En este caso no se uso to_categorical de Keras ni fue necesario usar el reshape para los valores de entrada,
la función Flatten() nos ayudo a evitar todo eso, además en la capa final tampoco fue necesario poner el Softmax ya que la funcion de perdida
SparseCategoricalCrossEntropy la incluye, para que funcione es necesario que este el from_logits=True

Asímismo se puede observar en la ultima imagen que al tratar de predecir los valores del 0 al 5 estos resultaron los valores de prueba (label_test)

Les recomiendo mucho este video, es otra forma de hacer el problema planteado acá
https://www.youtube.com/watch?v=Edhv7-4t0lc&list=PLqnslRFeH2Uqfv1Vz3DqeQfy0w20ldbaV&index=3

En mi caso tuve que “buildear” el modelo para poder acceder al summary.

model.build(input_shape) # `input_shape` is the shape of the input data

Si les da error el importar to_categorial pueden usar la siguiente línea de código:

from tensorflow.keras.utils import to_categorical