Regresión Softmax usando Keras

Requisitos previos: regresión logística
Primeros pasos con Keras: 
el aprendizaje profundo es uno de los principales subcampos del marco de aprendizaje automático. Es compatible con varias bibliotecas como Theano, TensorFlow, Caffe, Mxnet, etc. para crear modelos de aprendizaje profundo. 
Keras ofrece una colección de conjuntos de datos que se pueden usar para entrenar y probar el modelo. El conjunto de datos Fashion MNIST es parte de los conjuntos de datos disponibles presentes en la API de conjuntos de datos tf.keras . Este conjunto de datos contiene 70mil imágenes de objetos de moda que se distribuyen en 10 categorías, como zapatos, bolsos, camisetas, etc., que se escalan a 28 por 28 píxeles en escala de grises.
Enfoque: 
Entonces, el enfoque sería cargar primero el conjunto de datos de objetos MNIST y luego usaremos Matplotlib para ver ejemplos y tener una mejor idea sobre el conjunto de datos. Luego, finalmente, los clasificaremos utilizando la API de Keras mediante la construcción de una red neuronal. Más tarde, probaremos nuestro modelo entrenado en el conjunto de prueba para verificar la precisión de nuestro modelo. 
Implementación: 
Código: Cargando los datos
 

Python3

mnist = tf.keras.datasets.fashion_mnist
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()

Llamar a load_data en este objeto nos dará dos conjuntos de dos listas, estos serán los valores de entrenamiento y prueba para los gráficos que contienen los elementos del conjunto de datos y sus etiquetas.
Código: comprensión de los datos
 

Python3

import numpy as np
np.set_printoptions(linewidth = 200)
import matplotlib.pyplot as plt
plt.imshow(training_images[42])
 
# printing training labels and training images
print(training_labels[42])
print(training_images[42])

Producción: 
 

9
[[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  82 187  26   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   1   0   0   1   0   0 179 240 237 255 240 139  83  64  43  60  54   0   1]
 [  0   0   0   0   0   0   0   0   0   1   0   0   1   0  58 239 222 234 238 246 252 254 255 248 255 187   0   0]
 [  0   0   0   0   0   0   0   0   0   0   2   3   0   0 194 239 226 237 235 232 230 234 234 233 249 171   0   0]
 [  0   0   0   0   0   0   0   0   0   1   1   0   0  10 255 226 242 239 238 239 240 239 242 238 248 192   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0 172 245 229 240 241 240 241 243 243 241 227 250 209   0   0]
 [  0   0   0   0   0   0   0   0   0   6   5   0  62 255 230 236 239 241 242 241 242 242 238 238 242 253   0   0]
 [  0   0   0   0   0   0   0   0   0   3   0   0 255 235 228 244 241 241 244 243 243 244 243 239 235 255  22   0]
 [  0   0   0   0   0   0   0   0   0   0   0 246 228 220 245 243 237 241 242 242 242 243 239 237 235 253 106   0]
 [  0   0   3   4   4   2   1   0   0  18 243 228 231 241 243 237 238 242 241 240 240 240 235 237 236 246 234   0]
 [  1   0   0   0   0   0   0   0  22 255 238 227 238 239 237 241 241 237 236 238 239 239 239 239 239 237 255   0]
 [  0   0   0   0   0  25  83 168 255 225 225 235 228 230 227 225 227 231 232 237 240 236 238 239 239 235 251  62]
 [  0 165 225 220 224 255 255 233 229 223 227 228 231 232 235 237 233 230 228 230 233 232 235 233 234 235 255  58]
 [ 52 251 221 226 227 225 225 225 226 226 225 227 231 229 232 239 245 250 251 252 254 254 252 254 252 235 255   0]
 [ 31 208 230 233 233 237 236 236 241 235 241 247 251 254 242 236 233 227 219 202 193 189 186 181 171 165 190  42]
 [ 77 199 172 188 199 202 218 219 220 229 234 222 213 209 207 210 203 184 152 171 165 162 162 167 168 157 192  78]
 [  0  45 101 140 159 174 182 186 185 188 195 197 188 175 133  70  19   0   0 209 231 218 222 224 227 217 229  93]
 [  0   0   0   0   0   0   2  24  37  45  32  18  11   0   0   0   0   0   0  72  51  53  37  34  29  31   5   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]]

  
Normalización: 
Observe que todos los valores en el número están entre 0 y 255. Si estamos entrenando una red neuronal, por varias razones es más fácil si tratamos todos los valores entre 0 y 1, un proceso llamado ‘normalización’… y afortunadamente en Python es fácil normalizar una lista como esta sin bucles. Podemos hacerlo así:
Código: 
 

Python3

training_images = training_images / 255.0
test_images = test_images / 255.0

Código: Implementación del modelo Keras
 

Python3

model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
                                    tf.keras.layers.Dense(128, activation = tf.nn.relu),
                                    tf.keras.layers.Dense(10, activation = tf.nn.softmax)])
  • Secuencial: Que define una SECUENCIA de capas en la red neuronal.
  • Aplanar: simplemente toma la imagen y la convierte en un conjunto de 1 dimensión.
  • Densa: Añade una capa de neuronas.
  • Cada capa de neuronas necesita una función de activación para decirles qué hacer. Hay muchas opciones, pero solo utilízalas por ahora.
  • Relu: Efectivamente significa “Si X > 0 devuelve X , de lo contrario devuelve 0″, entonces lo que hace es que solo pasa valores de 0 o mayores a la siguiente capa en la red.
  • Softmax: toma un conjunto de valores y elige efectivamente el más grande, por lo que, por ejemplo, si la salida de la última capa se ve como [0.1, 0.1, 0.05, 0.1, 9.5, 0.1, 0.05, 0.05, 0.05] , le evita buscar el valor más grande y lo convierte en [0, 0, 0, 0, 1, 0, 0, 0, 0] . El objetivo es ahorrar mucha codificación.

Paso 5: compilar el modelo 
Lo siguiente que debe hacer, ahora que el modelo está definido, es construirlo. Haces esto compilándolo con un optimizador y una función de pérdida como antes y luego lo entrenas llamando a model.fit pidiéndole que ajuste tus datos de entrenamiento a tus etiquetas de entrenamiento, es decir, haz que descubra la relación entre los datos de entrenamiento y sus etiquetas reales , por lo que en el futuro, si tiene datos que se parecen a los datos de entrenamiento, puede hacer una predicción de cómo se verían esos datos. 
Código: 
 

Python3

model.compile(optimizer = tf.optimizers.Adam(),
              loss = 'sparse_categorical_crossentropy',
              metrics =['accuracy'])
 
model.fit(training_images, training_labels, epochs = 5)

Producción: 
 

Instructions for updating:
Colocations handled automatically by placer.
Epoch 1/5
60000/60000 [==============================] - 8s 130us/sample - loss: 0.4714 - acc: 0.8322
Epoch 2/5
60000/60000 [==============================] - 8s 137us/sample - loss: 0.3598 - acc: 0.8683
Epoch 3/5
60000/60000 [==============================] - 9s 142us/sample - loss: 0.3201 - acc: 0.8824
Epoch 4/5
60000/60000 [==============================] - 8s 131us/sample - loss: 0.2949 - acc: 0.8917
Epoch 5/5
60000/60000 [==============================] - 8s 140us/sample - loss: 0.2767 - acc: 0.9098

Una vez que haya terminado el entrenamiento, deberíamos ver un valor de precisión al final de la época final. Podría verse algo así como 0.9098. Esto nos dice que su red neuronal tiene una precisión de alrededor del 91 % en la clasificación de los datos de entrenamiento. es decir, descubrió una coincidencia de patrón entre la imagen y las etiquetas que funcionó el 91% de las veces. No muy bien, pero no está mal teniendo en cuenta que solo se entrenó durante 5 épocas y se hizo con bastante rapidez.
Paso 6: Evaluación del modelo 
Pero, ¿cómo funcionaría con datos ocultos? Por eso tenemos las imágenes de prueba. Podemos llamar a model.evaluate y pasar los dos conjuntos, e informará la pérdida de cada uno. 

Código: 
 

Python3

model.evaluate(test_images, test_labels)

Producción: 
 

10000/10000 [==============================] - 1s 60us/sample - loss: 0.2908 - acc: 0.8956

Finalmente, entrenamos nuestro modelo y obtuvimos una precisión del 90% en el conjunto de datos no visto. Eso es bastante bueno.
Ventajas de usar KERAS: 
Hemos visto que nuestros cálculos se han reducido a 7-8 líneas en lugar de cien líneas de código. Eso es genial. En general, esto nos ayuda a ahorrar tiempo y energía y también reduce las posibilidades de error en nuestro código.
 

Publicación traducida automáticamente

Artículo escrito por raghav1701 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *