Comenzando con TensorFlow

Comenzando con TensorFlow
TensorFlow es el niño cerebral de Google y, en esencia, es una biblioteca para el cálculo numérico. Está escrito en C/C ++ y tiene una API muy flexible. Esta API se puede interactuar con un front-end de Python para que pueda escribir pequeños fragmentos de código Python para resolver problemas complicados. Una API flexible y consistente también permite a los desarrolladores usar el mismo código frontal para ejecutarse en varias plataformas como las GPU NVIDIA, las CPU de uso general e incluso dispositivos móviles e integrados, cada uno de los cuales tiene una implementación muy diferente en el back-end.

TensorFlow ha encontrado un uso inmenso en el campo del aprendizaje automático, precisamente porque el aprendizaje automático implica una gran cantidad de certificadores y se usa como una técnica de resolución de problemas generalizada. Y aunque estaremos interactuando con él usando Python, tiene front-end para otros idiomas como Go, Node.JS e incluso C#.

TensorFlow es como una caja negra que oculta todas las sutilezas matemáticas dentro y el desarrollador solo llama a las funciones correctas para resolver un problema. Pero que problema?

Aprendizaje automático (ML)

Supongamos que estás diseñando un bot para jugar un juego de ajedrez. Debido a la forma en que se diseña el ajedrez, la forma en que las piezas se mueven y el objetivo bien definido del juego, es muy posible escribir un programa que jugaría el juego extremadamente bien. De hecho, superaría a toda la raza humana en el ajedrez. Sabría exactamente qué movimiento necesita hacer dado el estado de todas las piezas en el tablero.

Sin embargo, dicho programa solo puede jugar al ajedrez. Las reglas del juego se hornean en la lógica del código y todo lo que hace el programa es ejecutar esa lógica rigurosa y con mayor precisión de lo que cualquier humano podría. No es un algoritmo de propósito general que pueda usar para diseñar cualquier juego de juego.

Con el aprendizaje automático, los cambios de paradigma y los algoritmos se vuelven cada vez más de propósito general.

La idea es simple, comienza definiendo un problema de clasificación. Por ejemplo, desea automatizar el proceso de identificación de las especies de arañas. Las especies que se conocen son las diversas clases (que no deben confundirse con las clases taxonómicas) y el objetivo del algoritmo es ordenar una nueva imagen desconocida en una de estas clases.

Aquí, el primer paso para el humano sería determinar las características de varias arañas individuales. Suministraban datos sobre la longitud, el ancho, la masa corporal y el color de las arañas individuales junto con las especies a las que pertenecen:

Longitud Ancho Masa Color Textura Especies
5 3 12 Marrón liso Papá piernas largas
10 8 28 Negro peludo Tarántula

Tener una gran recopilación de dichos datos de arañas individuales se utilizará para 'capacitar' el algoritmo y otro conjunto de datos similar se utilizará para probar el algoritmo para ver qué tan bien lo hace contra la nueva información que nunca ha encontrado antes, pero que ya sabemos el Respuesta para.

El algoritmo comenzará de forma aleatoria. Es decir, cada araña independientemente de sus características se clasificaría como cualquiera de las especies. Si hay 10 especies diferentes en nuestro conjunto de datos, entonces este algoritmo ingenuo se le daría la clasificación correcta aproximadamente 1/10 del tiempo debido a la suerte.

Pero entonces el aspecto de aprendizaje automático comenzaría a hacerse cargo. Comenzaría a asociar ciertas características con ciertos resultados. Por ejemplo, es probable que las arañas peludas sean tarántulas, al igual que las arañas más grandes. Entonces, siempre que aparezca una nueva araña grande y peluda, se le asignará una mayor probabilidad de ser tarántula. Observe, todavía estamos trabajando con probabilidades, esto se debe a que inherentemente estamos trabajando con un algoritmo probabilístico.

La parte de aprendizaje funciona alterando las probabilidades. Inicialmente, el algoritmo comienza asignando aleatoriamente las etiquetas de 'especie' a los individuos haciendo correlaciones aleatorias como ser 'peludas' y ser 'piernas largas de papá'. Cuando hace tal correlación y el conjunto de datos de capacitación no parece estar de acuerdo con él, esa suposición se elimina.

Del mismo modo, cuando una correlación funciona bien a través de varios ejemplos, se fortalece cada vez. Este método de tropezar hacia la verdad es notablemente efectivo, gracias a muchas de las sutilezas matemáticas que, como principiante, no querrías preocuparte.

Tensorflow y entrenamiento de tu propio clasificador de flores

TensorFlow lleva la idea del aprendizaje automático aún más. En el ejemplo anterior, estaba a cargo de determinar las características que distinguen una especie de araña de otra. Tuvimos que medir las arañas individuales minuciosamente y crear cientos de dichos registros.

Pero podemos hacerlo mejor, al proporcionar solo datos de imagen sin procesar al algoritmo, podemos dejar que el algoritmo encuentre patrones y comprender varias cosas sobre la imagen como reconocer las formas en la imagen, luego comprender cuál es la textura de las diferentes superficies, el color del color, el color , así que. Esta es la noción inicial de visión por computadora y también puede usarla para otro tipo de entradas, como las señales de audio y la capacitación de su algoritmo para el reconocimiento de voz. Todo esto viene bajo el término general de 'aprendizaje profundo' donde el aprendizaje automático se lleva a su extremo lógico.

Este conjunto generalizado de nociones puede especializarse cuando se trata de muchas imágenes de flores y clasificándolas.

En el ejemplo a continuación usaremos un Python2.7 front-end para interactuar con TensorFlow y utilizaremos PIP (no PIP3) para instalar TensorFlow. El soporte de Python 3 sigue siendo un poco buggy.

Para hacer su propio clasificador de imagen, usando TensorFlow primero instalarlo usando pepita:

$ PIP Instalar TensorFlow

A continuación, necesitamos clonar el tensorflow-for-poets-2 repositorio de git. Este es un lugar realmente bueno para comenzar por dos razones:

  1. Es simple y fácil de usar
  2. Viene previamente entrenado hasta cierto punto. Por ejemplo, el clasificador de flores ya está entrenado para comprender qué textura está mirando y qué forma está mirando para que sea computacionalmente menos intensivo.

Obtenamos el repositorio:

$ git clon https: // github.com/googlecodelabs/tensorflow-for-poets-2
$ CD tensorflow-for-poets-2

Este será nuestro directorio de trabajo, por lo que todos los comandos deben emitirse desde él, de ahora en adelante.

Todavía necesitamos entrenar el algoritmo para el problema específico de reconocer las flores, para eso necesitamos datos de entrenamiento, así que obtengamos eso:

$ curl http: // descargar.flujo tensor.org/ejemplo_images/flor_photos.tgz
| tar xz -c tf_files

El directorio… ./tensorflow-for poets-2/tf_files contiene una tonelada de estas imágenes correctamente etiquetadas y listas para ser utilizadas. Las imágenes serán para dos propósitos diferentes:

  1. Capacitación del programa ML
  2. Probar el programa ML

Puedes verificar el contenido de la carpeta TF_FILES Y aquí encontrará que estamos reduciendo solo a 5 categorías de flores, a saber, margaritas, tulipanes, girasoles, diente de león y rosas.

Entrenando el modelo

Puede comenzar el proceso de capacitación configurando primero las siguientes constantes para cambiar el tamaño de todas las imágenes de entrada en un tamaño estándar, y utilizando una arquitectura de liviano MobileNet:

$ Image_size = 224
$ Arquitectura = "mobilenet_0.50 _ $ image_size "

Luego invoque el script de Python ejecutando el comando:

$ python -m scripts.Vuelve \
--Bottleneck_dir = tf_files/bottlenecks \
--How_many_training_steps = 500 \
--model_dir = tf_files/ modelos/ \
--resumen_dir = tf_files/entrenador_summars/"$ arquitectura" \
--output_graph = tf_files/revertined_graph.Pb \
--output_labels = tf_files/reverned_labels.TXT \
--arquitectura = "$ arquitectura" \
--image_dir = tf_files/flor_photos

Si bien hay muchas opciones especificadas aquí, la mayoría de ellas especifican sus directorios de datos de entrada y el número de iteración, así como los archivos de salida donde se almacenaría la información sobre el nuevo modelo. Esto no debería tardar más de 20 minutos en correr en una computadora portátil mediocre.

Una vez que el guión termine tanto el entrenamiento como las pruebas, le dará una estimación de precisión del modelo entrenado, que en nuestro caso fue ligeramente superior al 90%.

Usando el modelo entrenado

Ahora está listo para usar este modelo para el reconocimiento de imágenes de cualquier imagen nueva de una flor. Usaremos esta imagen:

La cara del girasol es apenas visible y este es un gran desafío para nuestro modelo:

Para obtener esta imagen de Wikimedia Commons, use Wget:

$ wget https: // cargar.Wikimedia.org/wikipedia/commons/2/28/sunflower_head_2011_g1.JPG
$ mv sunflower_head_2011_g1.jpg tf_files/desconocido.JPG

Se guarda como desconocido.JPG bajo la TF_FILES subdirectorio.

Ahora, por el momento de la verdad, veremos lo que nuestro modelo tiene que decir sobre esta imagen.Para hacer eso, invocamos el etiqueta_image guion:

$ python -m scripts.Label_image --graph = tf_files/reverned_graph.PB --
imagen = tf_files/desconocido.JPG

Obtendrá una salida similar a esta:

Los números junto al tipo de flor representan la probabilidad de que nuestra imagen desconocida pertenezca a esa categoría. Por ejemplo, es 98.04% seguro de que la imagen es de un girasol y es solo 1.37% de posibilidades de que sea una rosa.

Conclusión

Incluso con recursos computacionales muy mediocres, estamos viendo una asombrosa precisión en la identificación de imágenes. Esto demuestra claramente la potencia y la flexibilidad del flujo de tensor.

De aquí en adelante, puede comenzar a experimentar con varios otros tipos de entradas o intentar comenzar a escribir su propia aplicación diferente usando Python y TensorFlow. Si desea saber el funcionamiento interno del aprendizaje automático un poco mejor, aquí hay una forma interactiva para que lo haga.