Saltar al contenido

Un simple modelo de aprendizaje profundo para sumar dos números

Keras es una especificación de la API que puede utilizarse para ejecutar varias bibliotecas de aprendizaje profundo, por ejemplo, Tensorflow, Theano, etc. Cabe señalar que Keras no tiene una implementación y es una API de alto nivel que se ejecuta sobre otras bibliotecas de aprendizaje profundo. El problema que estamos tratando de resolver es un problema de regresión en el que la salida puede ser un continuo de valores en lugar de tomar un conjunto específico de valores. A continuación, el programa crea un modelo de Aprendizaje Profundo, lo entrena utilizando el conjunto de entrenamiento que creamos en el programa data_creation.py, y luego lo prueba utilizando el conjunto de pruebas también creado en el mismo programa. Finalmente, el modelo entrenado se utiliza para predecir los valores.

12345678910111213141516171819202122importar tensorflow como tffrom tensorflow importar kerasimport numpy como npimport data_creation como dc model = keras. Secuencial([ keras.layers.Flatten(input_shape=(2,)), keras.layers.Dense(20, activation=tf.nn.relu), keras.layers.Dense(20, activation=tf.nn.relu), keras. capas.Densa(1)])modelo.compilar(optimizador=$0027adam$0027, pérdida=$0027mse$0027, métrica=[$0027mae$0027])modelo.fit(dc.train_data, dc.train_targets, épocas=10, tamaño_de_lote=1)prueba_pérdida, prueba_acc = modelo. evaluate(dc.test_data, dc.test_targets)print($0027Precisión de la prueba:$0027, test_acc)a= np.array([[2000,3000],[4,5]])print(model.predict(a))

pitón

Un simple modelo de aprendizaje profundo para sumar dos números
Un simple modelo de aprendizaje profundo para sumar dos números

Analicemos el programa anterior dividiéndolo en pequeños trozos:

1234importar tensorflow como tffrom tensorflow importar kerasimport numpy como npimport data_creation como dc

pitón

Las líneas de arriba importan las librerías Tensorflow, Keras y Numpy del programa. Además, el programa data_creation.py que creamos anteriormente también se importa y se le da una variable llamada como dc. Todos los conjuntos de datos de prueba que creamos ahora pueden ser referenciados usando el dc. Por ejemplo, si el usuario necesita utilizar el contenido de train_data entonces todo lo que tiene que hacer es utilizar dc.train_data para acceder a él.

123456model = keras.Sequential([ keras.layers.Flatten(input_shape=(2,))), keras.layers.Dense(20, activation=tf.nn.relu), keras.layers.Dense(20, activation=tf.nn.relu), keras.layers.Dense(1)])

pitón

El código anterior crea el verdadero modelo de Aprendizaje Profundo. El modelo anterior inicializa un modelo como una pila de capas (Keras.Sequential) y luego aplana la matriz de entrada a un vector (keras.layers.Flatten(input_shape=(2,)). La parte aplanada también resulta ser la primera capa de la red neuronal . La segunda y tercera capa de la red están formadas por 20 nodos cada una y la función de activación que utilizamos es relu (unidad lineal rectificada). También se pueden utilizar otras funciones de activación como softmax . La última capa, cuarta capa , es la capa de salida. Dado que esperamos un solo valor de salida (un valor predicho ya que este es un modelo de regresión), tenemos un solo nodo de salida en este modelo (keras.layers.Dense(1)).

La arquitectura del modelo depende, en gran medida, del problema que estamos tratando de resolver. El modelo que hemos creado anteriormente no funcionará muy bien para los problemas de clasificación, como la clasificación de imágenes.

123model.compile(optimizador=$0027adam$0027, pérdida=$0027mse$0027, métrica=[$0027mae$0027])

pitón

El código anterior se usará para compilar la red. La función de optimización que estamos usando es adam que es un optimizador basado en el momento y evita que el modelo se atasque en los mínimos locales. La función de pérdida que estamos usando es mse (error cuadrático medio). Considera la diferencia cuadrada entre los valores predichos y los valores reales. Además, estamos monitoreando otra métrica, mae (error absoluto medio).

1model.fit(dc.train_data, dc.train_targets, epochs=10, batch_size=1)

pitón

Aquí es donde ocurre el entrenamiento real de las redes. El conjunto de entrenamiento será alimentado a la red 10 veces (épocas) para el propósito de entrenamiento. Es necesario seleccionar cuidadosamente la época, ya que un número menor de épocas puede conducir a una red poco entrenada, mientras que demasiadas épocas pueden conducir a un exceso de entrenamiento, en el que la red funciona bien con los datos de entrenamiento pero no con el conjunto de datos de prueba.

12test_loss, test_acc = model.evaluate(dc.test_data, dc.test_targets)print($0027Test accuracy:$0027, test_acc)

pitón

El código anterior evalúa el modelo entrenado en el conjunto de datos de la prueba y posteriormente imprime el valor de la precisión de la prueba.

12a= np.array([[2000,3000],[4,5]]])print(model.predict(a))

pitón

Una vez que el modelo ha sido entrenado y probado podemos usarlo para predecir los valores suministrando valores del mundo real. En este caso, estamos suministrando los 2 conjuntos de valores (2000,30000) y (4,5) y el resultado del modelo se imprime.

Salida

123456789101112131415161718192021222324252627282930313233Epoch 1/105000/5000[==============================]- 5s 997us/muestra - pérdida:1896071.4827- error_absoluto_medio:219. 0276Epoch 2/105000/5000[================================]- 5s 956us/muestra - pérdida:492.9092- mean_absolute_error:3.8202Epoch 3/105000/5000[==============================================]- 5s 1ms/muestra - pérdida:999. 7580- mean_absolute_error:7.1740Epoch 4/105000/5000[==============================================]- 5s 1ms/muestra - pérdida:731.0374- mean_absolute_error:6. 0325Epoch 5/105000/5000[================================]- 5s 935us/muestra - pérdida:648.6434- mean_absolute_error:7.5037Epoch 6/105000/5000[============================================]- 5s 942us/muestra - pérdida:603. 1096- mean_absolute_error:7.7574Epoch 7/105000/5000[============================================]- 5s 1ms/muestra - pérdida:596.2445- mean_absolute_error:5. 1727Epoch 8/105000/5000[================================]- 5s 924us/muestra - pérdida:685.5327- mean_absolute_error:4.9312Epoch 9/105000/5000[============================================]- 5s 931us/muestra - pérdida:1895. 0845- mean_absolute_error:5.7679Epoch 10/105000/5000[==================================================]- 5s 996us/muestra - pérdida:365.9733- mean_absolute_error:2. 71202000/2000[============================]- 0s 42us/muestra - pérdida:5.8080- mean_absolute_error:2.0810Precisión de la prueba:2.0810156[[5095.9385][9.108022]]

pitón

Como puede verse, el valor predicho para el conjunto de entrada (2000,3000) es 5095.9385 y para el conjunto de entrada (4,5) es 9.108022. Esto se puede optimizar cambiando las épocas o aumentando las capas o aumentando el número de nodos en una capa.