Te presentamos el aprendizaje automático de aprendizaje automático

1. Antes de comenzar

En este codelab, aprenderás los conceptos básicos del AA, donde, en lugar de programar reglas explícitas en un lenguaje, como Java o C++, compilarás un sistema entrenado a partir de datos para inferir las reglas que determinan una relación entre números.

Considera el siguiente problema: estás compilando un sistema que realiza reconocimiento de actividades para seguimiento de actividad física. Es posible que tengas acceso a la velocidad a la que camina una persona y que intentes inferir su actividad en función de esa velocidad utilizando un condicional.

cc3628d9a1547597.png

if(speed<4){
  status=WALKING;
}

Podrías extenderla a la ejecución con otra condición.

f2cc3929221107b8.png

if(speed<4){
    status=WALKING;
} else {
    status=RUNNING;
}

En una condición final, también podrías detectar ciclismo.

aeb282cf03d5cff.png

if(speed<4){
    status=WALKING;
} else if(speed<12){
    status=RUNNING;
} else {
    status=BIKING;
}

Ahora, considere lo que sucede cuando desea incluir una actividad, como golf. Es menos evidente cómo crear una regla para determinar la actividad.

fc772abb6fee2804.png

// Now what?

Es muy difícil escribir un programa que reconozca la actividad de golf, así que ¿qué haces? Puede usar el AA para resolver el problema.

Requisitos previos

Antes de probar este codelab, debes hacer lo siguiente:

  • Un conocimiento sólido de Python
  • Habilidades básicas de programación

Qué aprenderás

  • Conceptos básicos del aprendizaje automático

Qué compilarás

  • Tu primer modelo de aprendizaje automático

Requisitos

Si nunca creaste un modelo de AA con TensorFlow, puedes usar Colaboratory, un entorno basado en el navegador que contiene todas las dependencias requeridas. Puedes encontrar el código para el resto del codelab que se ejecuta en Colab.

Si usas un IDE diferente, asegúrate de tener instalado Python. También necesitarás TensorFlow y la biblioteca de NumPy. Obtén más información e instala TensorFlow aquí. Instala NumPy aquí.

2. ¿Qué es el AA?

Considera la manera tradicional de compilar apps, como se muestra en el siguiente diagrama:

c72f871306134e45.png

Las reglas se expresan en un lenguaje de programación. Actúan en función de los datos y tu programa proporciona respuestas**.** En el caso de la detección de actividad, las reglas (el código que escribiste para definir tipos de actividad) actuaron sobre los datos (la velocidad de movimiento de la persona) para producir una respuesta: el valor de retorno de la función para determinar el estado de la actividad del usuario (si estaba caminando, corriendo, andando en bicicleta o haciendo algo más).

El proceso para detectar ese estado de actividad mediante el AA es muy similar, solo que los ejes son diferentes.

9b85a337ee816e1b.png

En lugar de intentar definir las reglas y expresarlas en un lenguaje de programación, debes proporcionar las respuestas (generalmente llamadas etiquetas) junto con los datos, y la máquina infiere las reglas que determinan la relación entre las respuestas y los datos. Por ejemplo, tu situación de detección de actividad puede verse así en un contexto de AA:

6ff58697a85931f4.png

Recopila muchos datos y etiquétalos para indicar con claridad "así que se ve caminar" o "así es correr". Luego, la computadora puede deducir las reglas que determinan, a partir de los datos, cuáles son los patrones distintos que denotan una actividad en particular.

Además de ser un método alternativo a la programación de esa situación, ese enfoque también te brinda la posibilidad de abrir nuevas situaciones, como la de golf que quizás no hubiera sido posible con el enfoque de programación tradicional basado en reglas.

En la programación tradicional, tu código se compila en un objeto binario que generalmente se denomina programa. En AA, el elemento que crea a partir de los datos y las etiquetas se denomina modelo.

Si vuelve a este diagrama, ocurrirá lo siguiente:

53ff9e2cb511936e.png

El resultado será un modelo que se usa en el tiempo de ejecución:

693430bb4d7fa001.png

Debes pasar algunos datos al modelo, y el modelo usa las reglas que infirió del entrenamiento para hacer una predicción. Por ejemplo, esos datos parecen caminar, o esos datos parecen andar en bicicleta.

3. Cree su primer modelo de AA

Considera los siguientes conjuntos de números. ¿Puedes ver la relación entre ellas?

X:

-1

0

1

2

3

4

Y:

-2

1

4

7

10

13

Si las observas, notarás que el valor de X aumenta en 1 a medida que lees de izquierda a derecha, y el valor correspondiente de Y está aumentando en 3. Es probable que creas que Y es igual a 3 veces mayor o menor que algo. Es probable que observes el 0 en X y veas que Y es 1, y determinas la relación Y=3X+1.

Eso es casi exactamente cómo usarías el código para entrenar un modelo a fin de detectar los patrones en los datos.

Ahora mira el código para hacerlo.

¿Cómo se debería entrenar una red neuronal para que realice la tarea equivalente? Usando datos Al alimentarlo con un conjunto de X y un conjunto de Y, debería poder determinar la relación entre ellos.

Importaciones

Comienza con tus importaciones. Aquí, importarás TensorFlow y lo llamarás tf para facilitar el uso.

A continuación, importa una biblioteca llamada numpy, que representa tus datos como listas de manera fácil y rápida.

El framework para definir una red neuronal como un conjunto de capas secuenciales se denomina keras, así que importa eso también.

import tensorflow as tf
import numpy as np
from tensorflow import keras

Definir y compilar la red neuronal

A continuación, cree la red neuronal más simple posible. Tiene una capa, esa capa tiene una neurona, y la forma de entrada de esta es solo un valor.

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

A continuación, escribe el código para compilar tu red neuronal. Cuando lo hagas, debes especificar dos funciones: loss y optimizer.

En este ejemplo, sabe que la relación entre los números es Y=3X+1.

Cuando la computadora intenta aprender eso, hace una conjetura, quizás Y=10X+10. La función loss mide las respuestas que adivinó en comparación con las respuestas correctas conocidas y mide el rendimiento de la respuesta.

A continuación, el modelo usa la función optimizer para hacer otra estimación. Según la función de pérdida, intenta minimizar la pérdida. En este punto, quizá surge algo con Y=5X+5. Si bien eso es bastante malo, se encuentra más cerca del resultado correcto (la pérdida es menor).

El modelo se repite durante la cantidad de épocas, que verás en breve.

Primero, veamos cómo indicarle que use mean_squared_error para la pérdida y el descenso de gradientes estocástico (sgd) para el optimizador. No es necesario que comprendas los cálculos, ya que puedes ver que funcionan.

Con el tiempo, aprenderás las diferentes funciones de pérdida y optimizador, y las adecuadas para diferentes situaciones.

model.compile(optimizer='sgd', loss='mean_squared_error')

Proporciona los datos

A continuación, ingresa algunos datos. En este caso, tome las seis variables X y Y anteriores. Puede ver que la relación entre ellos es que Y=3X+1, en donde X es -1, Y es -2.

Para hacerlo, se usa una biblioteca de Python llamada NumPy, que proporciona muchas estructuras de datos de tipo array. Especifica los valores como un arreglo en NumPy con np.array[].

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

Ahora, tiene todo el código necesario para definir la red neuronal. El siguiente paso es entrenarlo para ver si puede inferir los patrones entre esos números y usarlos para crear un modelo.

4. Entrena la red neuronal

El proceso de entrenamiento de la red neuronal, donde aprende la relación entre las X y las Y, está en la llamada model.fit. En este punto, pasará por el bucle antes de hacer una conjetura, medir lo bueno o malo que es (la pérdida) o usar el optimizador para hacer otra estimación. Hará eso durante el número de ciclos de entrenamiento que especifiques. Cuando ejecutes ese código, verás que la pérdida se imprimirá para cada época.

model.fit(xs, ys, epochs=500)

Por ejemplo, puedes ver que, durante las primeras etapas, el valor de pérdida es bastante grande, pero se hace más pequeño con cada paso.

f110d5abed07c1b9.png

A medida que avanza el entrenamiento, la pérdida pronto se vuelve muy pequeña.

81ca5e71298b414b.png

Para el momento en que se completa el entrenamiento, la pérdida es muy pequeña, lo que demuestra que nuestro modelo está haciendo un excelente trabajo para inferir la relación entre los números.

12b187014b639fd.png

Probablemente no necesites los 500 ciclos de entrenamiento y puedes experimentar con distintas cantidades. Como puedes ver en el ejemplo, la pérdida es muy pequeña después de solo 50 ciclos de entrenamiento, por lo que eso podría ser suficiente.

5. Usa el modelo

Tiene un modelo que se entrenó para aprender la relación entre X e Y. Puedes usar el método model.predict para que averigüe la Y para una X desconocida. Por ejemplo, si X es 10, ¿cuál crees que será Y? Antes de ejecutar el siguiente código, adivina:

print(model.predict([10.0]))

Tal vez pensaste en 31, pero el resultado fue un poco más. ¿Por qué creé que pasó esto?

Las redes neuronales se ocupan de las probabilidades, por lo que calculó que existe una alta probabilidad de que la relación entre X e Y sea Y=3X+1, pero no puede saberlo con seis datos. El resultado es muy cercano a 31, pero no necesariamente a 31.

A medida que trabajas con redes neuronales, verás que ese patrón es recurrente. Casi siempre abordarás las probabilidades, no las incertidumbres, y practicarás un poco de código a fin de determinar cuál es el resultado basado en las probabilidades, especialmente cuando se trata de clasificación.

6. Felicitaciones

Aunque no lo creas, abarcaste la mayoría de los conceptos del AA que usarás en situaciones mucho más complejas. Aprendió a entrenar una red neuronal para detectar la relación entre dos conjuntos de números mediante la definición de la red. Definió un conjunto de capas (en este caso, solo una) que contenían neuronas (también en este caso, solo una), que luego compiló con una función de pérdida y un optimizador.

La recopilación de una red, una función de pérdida y un optimizador se encarga del proceso de adivinar la relación entre los números, medir su rendimiento y, luego, generar parámetros nuevos para las nuevas predicciones. Obtén más información en TensorFlow.org.

Más información

Para obtener información sobre cómo el AA y TensorFlow pueden ayudar con tus modelos de visión artificial, continúa con Crea un modelo de visión artificial con TensorFlow.