John Krohn, Grant Beyleveld y el gran ilustrador Aglae Bassens usan ejemplos y analogías vívidos para explicar qué es el aprendizaje profundo, por qué es tan popular y cómo se relaciona con otros enfoques del aprendizaje automático. El libro es ideal para desarrolladores, científicos de datos, investigadores, analistas y programadores aspirantes que desean aplicar el aprendizaje profundo a su trabajo. Los cálculos teóricos se complementan perfectamente con el código de la aplicación Python en los cuadernos Jupyter. Aprenderá las técnicas para crear modelos efectivos en TensorFlow y Keras, así como conocer PyTorch.
El conocimiento básico del aprendizaje profundo le permitirá crear aplicaciones reales, desde la visión por computadora y el procesamiento del lenguaje natural hasta la generación de imágenes y algoritmos de juegos.
Red de profundidad intermedia Keras
Al final de este capítulo, traduciremos el nuevo conocimiento teórico a la red neuronal y veremos si podemos superar el modelo anterior shallow_net_in_keras.ipynb en la clasificación de números escritos a mano.
Las primeras etapas de la creación de una red de profundidad intermedia en el cuaderno Jupyter intermediaria_net_in_keras.ipynb son idénticas a las etapas de la creación de su predecesor: una red superficial. Primero, se cargan las mismas dependencias de Keras, y el conjunto de datos MNIST se ingresa y procesa de la misma manera. Como puede ver en el Listado 8.1, la diversión comienza donde se define la arquitectura de la red neuronal.
Listado 8.1. Código que define la arquitectura de red neuronal con profundidad intermedia
model = Sequential()
model.add(Dense(64, activation='relu', input_shape=(784,)))
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))
La primera línea en este fragmento de código, modelo = Secuencial (), es la misma que en la red anterior (Listado 5.6); Es una instancia de un objeto modelo de red neuronal. Las discrepancias comienzan en la siguiente línea. En él, reemplazamos la función de activación sigmoidea en la primera capa oculta con la función relu, como se recomienda en el Capítulo 6. Todos los demás parámetros de la primera capa, excepto la función de activación, permanecieron iguales: todavía consta de 64 neuronas, y la dimensión de la capa de entrada permaneció igual. 784 neuronas.
Otro cambio significativo en el Listado 8.1 sobre la arquitectura superficial en el Listado 5.6 es la presencia de una segunda capa oculta de neuronas artificiales. Al llamar a model.add (), agregamos sin esfuerzo una segunda capa Densa con 64 neuronas relu, lo que justifica la palabra intermedia en el nombre del cuaderno. Al llamar a model.summary (), puede ver como se muestra en la Fig. 8.9 que esta capa adicional agrega 4,160 parámetros de entrenamiento adicionales, en comparación con la arquitectura superficial (ver Figura 7.5). Los parámetros se pueden dividir en:
- 4096 pesos correspondientes a los enlaces de cada una de las 64 neuronas en la segunda capa oculta con cada una de las 64 neuronas en la primera capa oculta (64 × 64 = 4096);
- más 64 compensaciones, una para cada neurona en la segunda capa oculta;
- el resultado son 4160 parámetros: n parámetros = nw + nb = 4096 + 64 =
= 4160.
Además de los cambios en la arquitectura del modelo, también cambiamos las opciones de compilación para el modelo, como se muestra en el Listado 8.2.
Listado 8.2. Código de compilación de red neuronal de profundidad intermedia
model.compile(loss='categorical_crossentropy',
optimizer=SGD(lr=0.1),
metrics=['accuracy'])
Estas líneas son del Listado 8.2:
- establecer una función de costo basada en la entropía cruzada: pérdida = 'categorical_crossentropy' (en una red superficial, el costo cuadrático se usó loss = 'mean_squared_error');
- definir un método de descenso de gradiente estocástico para minimizar el costo: optimizador = SGD;
- definir el hiperparámetro de velocidad de aprendizaje: lr = 0.1 (1) ;
- , , Keras , : metrics=['accuracy'](2).
(1) , , .
(2) , , , , , . , , , . , , : , (, « 86 »), (« 86 , »).
Finalmente, entrenamos la red intermedia ejecutando el código en el Listado 8.3.
Listado 8.3. Código de entrenamiento de red neuronal de profundidad intermedia
model.fit(X_train, y_train,
batch_size=128, epochs=20,
verbose=1,
validation_data=(X_valid, y_valid))
Lo único que ha cambiado en el entrenamiento de la red intermedia en comparación con la red superficial (ver Listado 5.7) es la disminución de las épocas de hiperparámetros en un orden de magnitud de 200 a 20. Como verá más adelante, una arquitectura intermedia más eficiente requiere muchas menos épocas para entrenar.
En la Fig. 8.10 muestra los resultados de las primeras cuatro épocas de capacitación en red. Como recordarán, nuestra arquitectura superficial alcanzó una meseta de 86% de precisión en los datos de validación después de 200 épocas. La red de profundidad intermedia la excedió significativamente: como muestra el campo val_acc, la red alcanzó una precisión del 92.34% después de la primera época de entrenamiento. Después de la tercera época, la precisión superó el 95%, y en la 20ª época parece haber alcanzado una meseta de aproximadamente el 97,6%. ¡Hemos hecho un progreso serio!
Echemos un vistazo más de cerca a la salida de model.fit (), que se muestra en la Fig. 8.10:
- La
barra de progreso que se muestra a continuación llena más de 469 "ciclos de aprendizaje" (ver Figura 8.5): 60000/60000 [======================== ======] - 1s 15us/step , 469 1 , 15 .
- loss . 0.4744 (SGD) , 0.0332 .
- acc — . 86.37% 99% . , .
- , (val_loss), , 0.08 .
- (val_acc). , 97.6%, 86% .
Hemos hecho un gran trabajo en este capítulo. Primero, aprendimos cómo una red neuronal de parámetros fijos procesa la información. Luego clasificamos los métodos de interacción: funciones de costo, descenso de gradiente estocástico y propagación hacia atrás, que le permiten ajustar los parámetros de red para aproximar cualquier valor verdadero de y que tenga una relación continua con alguna entrada x. En el camino, nos familiarizamos con varios hiperparámetros, incluida la tasa de aprendizaje, el tamaño del paquete y el número de épocas de aprendizaje, así como las reglas generales para ajustar cada uno de ellos. Al final del capítulo, aplicamos nuestro nuevo conocimiento para crear una red neuronal de profundidad intermedia, que superó significativamente a la red superficial anterior en el mismo problema de clasificar números escritos a mano.A continuación, analizaremos los métodos para mejorar la estabilidad de las redes neuronales artificiales a medida que se profundizan, lo que nos permite desarrollar y entrenar un modelo de aprendizaje profundo completo.
»Se puede encontrar más información sobre el libro en el sitio web del editor
» Contenido
» Extracto de
Khabrozhiteley 25% de descuento en el cupón - Aprendizaje profundo
Tras el pago de la versión en papel del libro, se envía un libro electrónico por correo electrónico.