¿Qué es TensorFlow? ¿Cómo funciona? Introducción & Arquitectura

Tabla de contenido:

Anonim

Comencemos este tutorial con la introducción de TensorFlow:

¿Qué es TensorFlow?

TensorFlow es una plataforma de código abierto de un extremo a otro para crear aplicaciones de aprendizaje automático. Es una biblioteca matemática simbólica que utiliza flujo de datos y programación diferenciable para realizar diversas tareas enfocadas en el entrenamiento e inferencia de redes neuronales profundas. Permite a los desarrolladores crear aplicaciones de aprendizaje automático utilizando diversas herramientas, bibliotecas y recursos comunitarios.

Actualmente, la biblioteca de aprendizaje profundo más famosa del mundo es TensorFlow de Google. El producto de Google utiliza el aprendizaje automático en todos sus productos para mejorar el motor de búsqueda, la traducción, los subtítulos de imágenes o las recomendaciones.

Para dar un ejemplo concreto, los usuarios de Google pueden experimentar una búsqueda más rápida y refinada con IA. Si el usuario escribe una palabra clave en la barra de búsqueda, Google ofrece una recomendación sobre cuál podría ser la siguiente palabra.

Google quiere utilizar el aprendizaje automático para aprovechar sus conjuntos de datos masivos y brindar a los usuarios la mejor experiencia. Tres grupos diferentes utilizan el aprendizaje automático:

  • Investigadores
  • Científicos de datos
  • Programadores.

Todos pueden usar el mismo conjunto de herramientas para colaborar entre sí y mejorar su eficiencia.

Google no solo tiene datos; tienen la computadora más grande del mundo, por lo que Tensor Flow se construyó a escala. TensorFlow es una biblioteca desarrollada por Google Brain Team para acelerar el aprendizaje automático y la investigación profunda de redes neuronales.

Fue construido para ejecutarse en múltiples CPU o GPU e incluso en sistemas operativos móviles, y tiene varios contenedores en varios lenguajes como Python, C ++ o Java.

En este tutorial de TensorFlow, aprenderá

  • ¿Qué es TensorFlow?
  • Historia de TensorFlow
  • Cómo funciona TensorFlow
  • Arquitectura de TensorFlow
  • ¿Dónde se puede ejecutar Tensorflow?
  • Introducción a los componentes de TensorFlow
  • ¿Por qué es popular TensorFlow?
  • Lista de algoritmos destacados admitidos por TensorFlow
  • Ejemplo simple de TensorFlow
  • Opciones para cargar datos en TensorFlow
  • Crear canalización de Tensorflow

Historia de TensorFlow

Hace un par de años, el aprendizaje profundo comenzó a superar a todos los demás algoritmos de aprendizaje automático al proporcionar una gran cantidad de datos. Google vio que podía usar estas redes neuronales profundas para mejorar sus servicios:

  • Gmail
  • Foto
  • Motor de búsqueda de Google

Construyen un marco llamado Tensorflow para permitir que investigadores y desarrolladores trabajen juntos en un modelo de IA. Una vez desarrollado y escalado, permite que muchas personas lo utilicen.

Se hizo público por primera vez a finales de 2015, mientras que la primera versión estable apareció en 2017. Es de código abierto bajo la licencia Apache Open Source. Puede usarlo, modificarlo y redistribuir la versión modificada por una tarifa sin pagar nada a Google.

A continuación, en este tutorial de aprendizaje profundo de TensorFlow, aprenderemos sobre la arquitectura de TensorFlow y cómo funciona TensorFlow.

Cómo funciona TensorFlow

TensorFlow te permite crear estructuras y gráficos de flujo de datos para definir cómo se mueven los datos a través de un gráfico tomando entradas como una matriz multidimensional llamada Tensor. Le permite construir un diagrama de flujo de operaciones que se pueden realizar en estas entradas, que va en un extremo y viene en el otro extremo como salida.

Arquitectura de TensorFlow

La arquitectura de Tensorflow funciona en tres partes:

  • Preprocesar los datos
  • Construye el modelo
  • Entrenar y estimar el modelo

Se llama Tensorflow porque toma la entrada como una matriz multidimensional, también conocida como tensores . Puede construir una especie de diagrama de flujo de operaciones (llamado Gráfico) que desea realizar en esa entrada. La entrada entra por un extremo y luego fluye a través de este sistema de operaciones múltiples y sale por el otro extremo como salida.

Es por eso que se llama TensorFlow porque el tensor entra, fluye a través de una lista de operaciones y luego sale por el otro lado.

¿Dónde se puede ejecutar Tensorflow?

Los requisitos de software y hardware de TensorFlow se pueden clasificar en

Fase de desarrollo: aquí es cuando entrenas el modo. La capacitación generalmente se realiza en su computadora de escritorio o computadora portátil.

Fase de ejecución o fase de inferencia: una vez que se realiza el entrenamiento, Tensorflow se puede ejecutar en muchas plataformas diferentes. Puedes ejecutarlo en

  • Escritorio con Windows, macOS o Linux
  • Nube como servicio web
  • Dispositivos móviles como iOS y Android

Puede entrenarlo en varias máquinas y luego ejecutarlo en una máquina diferente, una vez que tenga el modelo entrenado.

El modelo se puede entrenar y usar tanto en GPU como en CPU. Las GPU se diseñaron inicialmente para videojuegos. A finales de 2010, los investigadores de Stanford descubrieron que la GPU también era muy buena en operaciones matriciales y álgebra, por lo que las hace muy rápidas para realizar este tipo de cálculos. El aprendizaje profundo se basa en una gran cantidad de multiplicación de matrices. TensorFlow es muy rápido para calcular la multiplicación de matrices porque está escrito en C ++. Aunque está implementado en C ++, TensorFlow puede ser accedido y controlado por otros lenguajes principalmente, Python.

Finalmente, una característica importante de TensorFlow es TensorBoard. TensorBoard permite monitorear gráfica y visualmente lo que está haciendo TensorFlow.

Introducción a los componentes de TensorFlow

Tensor

El nombre de Tensorflow se deriva directamente de su marco principal: Tensor . En Tensorflow, todos los cálculos involucran tensores. Un tensor es un vector o matriz de n dimensiones que representa todo tipo de datos. Todos los valores en un tensor sostienen tipo de datos idéntico a un conocido (o parcialmente conocida) forma . La forma de los datos es la dimensionalidad de la matriz o arreglo.

Un tensor puede originarse a partir de los datos de entrada o el resultado de un cálculo. En TensorFlow, todas las operaciones se realizan dentro de un gráfico . El gráfico es un conjunto de cálculos que se realizan sucesivamente. Cada operación se denomina nodo operativo y están conectados entre sí.

El gráfico describe las operaciones y las conexiones entre los nodos. Sin embargo, no muestra los valores. El borde de los nodos es el tensor, es decir, una forma de poblar la operación con datos.

Gráficos

TensorFlow utiliza un marco gráfico. El gráfico reúne y describe todos los cálculos en serie realizados durante el entrenamiento. El gráfico tiene muchas ventajas:

  • Se hizo para ejecutarse en múltiples CPU o GPU e incluso en sistemas operativos móviles
  • La portabilidad del gráfico permite conservar los cálculos para su uso inmediato o posterior. El gráfico se puede guardar para ejecutarlo en el futuro.
  • Todos los cálculos del gráfico se realizan conectando tensores.
    • Un tensor tiene un nodo y una arista. El nodo lleva la operación matemática y produce salidas de puntos finales. Los bordes los bordes explican las relaciones de entrada / salida entre los nodos.

¿Por qué es popular TensorFlow?

TensorFlow es la mejor biblioteca de todas porque está diseñada para ser accesible para todos. La biblioteca de Tensorflow incorpora diferentes API para construir una arquitectura de aprendizaje profundo a escala como CNN o RNN. TensorFlow se basa en el cálculo de gráficos; permite al desarrollador visualizar la construcción de la red neuronal con Tensorboad. Esta herramienta es útil para depurar el programa. Finalmente, Tensorflow está diseñado para implementarse a escala. Funciona con CPU y GPU.

Tensorflow atrae la mayor popularidad en GitHub en comparación con el otro marco de aprendizaje profundo.

Lista de algoritmos destacados admitidos por TensorFlow

A continuación se muestra la lista de algoritmos de TensorFlow compatibles:

Actualmente, TensorFlow 1.10 tiene una API integrada para:

  • Regresión lineal: tf.estimator.LinearRegressor
  • Clasificación: tf.estimator.LinearClassifier
  • Clasificación de aprendizaje profundo: tf.estimator.DNNClassifier
  • Borrado de aprendizaje profundo y profundo: tf.estimator.DNNLinearCombinedClassifier
  • Regresión del árbol de refuerzo: tf.estimator.BoostedTreesRegressor
  • Clasificación de árboles mejorada: tf.estimator.BoostedTreesClassifier

Ejemplo simple de TensorFlow

import numpy as npimport tensorflow as tf

En las dos primeras líneas de código, hemos importado tensorflow como tf. Con Python, es una práctica común usar un nombre corto para una biblioteca. La ventaja es evitar escribir el nombre completo de la biblioteca cuando necesitamos usarla. Por ejemplo, podemos importar tensorflow como tf y llamar a tf cuando queremos usar una función tensorflow

Practiquemos el flujo de trabajo elemental de Tensorflow con ejemplos simples de TensorFlow. Creemos un gráfico computacional que multiplique dos números.

Durante el ejemplo, multiplicaremos X_1 y X_2 juntos. Tensorflow creará un nodo para conectar la operación. En nuestro ejemplo, se llama multiplicar. Cuando se determina el gráfico, los motores de cálculo de Tensorflow multiplicarán X_1 y X_2.

Ejemplo de TensorFlow

Finalmente, ejecutaremos una sesión de TensorFlow que ejecutará el gráfico computacional con los valores de X_1 y X_2 e imprimirá el resultado de la multiplicación.

Definamos los nodos de entrada X_1 y X_2. Cuando creamos un nodo en Tensorflow, tenemos que elegir qué tipo de nodo crear. Los nodos X1 y X2 serán un nodo marcador de posición. El marcador de posición asigna un nuevo valor cada vez que hacemos un cálculo. Los crearemos como un nodo marcador de posición de punto TF.

Paso 1: definir la variable

X_1 = tf.placeholder(tf.float32, name = "X_1")X_2 = tf.placeholder(tf.float32, name = "X_2")

Cuando creamos un nodo de marcador de posición, tenemos que pasar el tipo de datos y agregar números aquí para que podamos usar un tipo de datos de punto flotante, usemos tf.float32. También necesitamos darle un nombre a este nodo. Este nombre aparecerá cuando miremos las visualizaciones gráficas de nuestro modelo. Nombramos este nodo X_1 pasando un parámetro llamado nombre con un valor de X_1 y ahora definamos X_2 de la misma manera. X_2.

Paso 2: definir el cálculo

multiply = tf.multiply(X_1, X_2, name = "multiply")

Ahora podemos definir el nodo que realiza la operación de multiplicación. En Tensorflow podemos hacer eso creando un nodo tf.multiply.

Pasaremos los nodos X_1 y X_2 al nodo de multiplicación. Le dice a tensorflow que vincule esos nodos en el gráfico computacional, por lo que le pedimos que extraiga los valores de xey y multiplique el resultado. Démosle también al nodo de multiplicación el nombre multiplicar. Es la definición completa de nuestro gráfico computacional simple.

Paso 3: ejecutar la operación

Para ejecutar operaciones en el gráfico, tenemos que crear una sesión. En Tensorflow, lo hace tf.Session (). Ahora que tenemos una sesión, podemos pedirle a la sesión que ejecute operaciones en nuestro gráfico computacional llamando a session. Para ejecutar el cálculo, necesitamos usar run.

Cuando se ejecute la operación de adición, verá que necesita tomar los valores de los nodos X_1 y X_2, por lo que también necesitamos introducir valores para X_1 y X_2. Podemos hacerlo proporcionando un parámetro llamado feed_dict. Pasamos el valor 1,2,3 para X_1 y 4,5,6 para X_2.

Imprimimos los resultados con print (resultado). Deberíamos ver 4, 10 y 18 para 1x4, 2x5 y 3x6

X_1 = tf.placeholder(tf.float32, name = "X_1")X_2 = tf.placeholder(tf.float32, name = "X_2")multiply = tf.multiply(X_1, X_2, name = "multiply")with tf.Session() as session:result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})print(result)
[ 4. 10. 18.]

Opciones para cargar datos en TensorFlow

El primer paso antes de entrenar un algoritmo de aprendizaje automático es cargar los datos. Hay dos formas comunes de cargar datos:

1. Cargar datos en la memoria: es el método más simple. Carga todos sus datos en la memoria como una única matriz. Puedes escribir un código Python. Estas líneas de código no están relacionadas con Tensorflow.

2. Canalización de datos de Tensorflow. Tensorflow tiene una API incorporada que lo ayuda a cargar los datos, realizar la operación y alimentar el algoritmo de aprendizaje automático fácilmente. Este método funciona muy bien, especialmente cuando tiene un gran conjunto de datos. Por ejemplo, se sabe que los registros de imágenes son enormes y no caben en la memoria. La canalización de datos administra la memoria por sí misma

¿Qué solución usar?

Cargar datos en la memoria

Si su conjunto de datos no es demasiado grande, es decir, menos de 10 gigabytes, puede utilizar el primer método. Los datos pueden caber en la memoria. Puede usar una biblioteca famosa llamada Pandas para importar archivos CSV. Aprenderá más sobre los pandas en el siguiente tutorial.

Cargar datos con la canalización de Tensorflow

El segundo método funciona mejor si tiene un gran conjunto de datos. Por ejemplo, si tiene un conjunto de datos de 50 gigabytes y su computadora solo tiene 16 gigabytes de memoria, la máquina se bloqueará.

En esta situación, debes crear una canalización de Tensorflow. La canalización cargará los datos en lotes o en pequeños fragmentos. Cada lote se enviará a la tubería y estará listo para la capacitación. La construcción de una canalización es una solución excelente porque le permite utilizar la computación en paralelo. Significa que Tensorflow entrenará el modelo en varias CPU. Fomenta la computación y permite entrenar potentes redes neuronales.

Verá en los próximos tutoriales cómo construir una tubería significativa para alimentar su red neuronal.

En pocas palabras, si tiene un conjunto de datos pequeño, puede cargar los datos en la memoria con la biblioteca de Pandas.

Si tiene un conjunto de datos grande y desea utilizar varias CPU, se sentirá más cómodo para trabajar con la canalización de Tensorflow.

Crear canalización de Tensorflow

En el ejemplo anterior, agregamos manualmente tres valores para X_1 y X_2. Ahora veremos cómo cargar datos en Tensorflow.

Paso 1) Crea los datos

En primer lugar, usemos la biblioteca numpy para generar dos valores aleatorios.

import numpy as npx_input = np.random.sample((1,2))print(x_input)

[[0.8835775 0.23766977]]

Paso 2) Crea el marcador de posición

Como en el ejemplo anterior, creamos un marcador de posición con el nombre X. Necesitamos especificar la forma del tensor explícitamente. En el caso, cargaremos una matriz con solo dos valores. Podemos escribir la forma como shape = [1,2]

# using a placeholderx = tf.placeholder(tf.float32, shape=[1,2], name = 'X')

Paso 3) Defina el método del conjunto de datos

a continuación, necesitamos definir el conjunto de datos donde podemos completar el valor del marcador de posición x. Necesitamos usar el método tf.data.Dataset.from_tensor_slices

dataset = tf.data.Dataset.from_tensor_slices(x)

Paso 4) Crea la canalización

En el paso cuatro, necesitamos inicializar la canalización donde fluirán los datos. Necesitamos crear un iterador con make_initializable_iterator. Lo llamamos iterador. Luego, debemos llamar a este iterador para alimentar el siguiente lote de datos, get_next. Llamamos a este paso get_next. Tenga en cuenta que en nuestro ejemplo, solo hay un lote de datos con solo dos valores.

iterator = dataset.make_initializable_iterator()get_next = iterator.get_next()

Paso 5) Ejecuta la operación

El último paso es similar al ejemplo anterior. Iniciamos una sesión y ejecutamos el iterador de operación. Alimentamos el feed_dict con el valor generado por numpy. Estos dos valores llenarán el marcador de posición x. Luego ejecutamos get_next para imprimir el resultado.

with tf.Session() as sess:# feed the placeholder with datasess.run(iterator.initializer, feed_dict={ x: x_input })print(sess.run(get_next)) # output [ 0.52374458 0.71968478]
[0.8835775 0.23766978]

Resumen

Significado de TensorFlow: TensorFlow es la biblioteca de aprendizaje profundo más famosa de los últimos años. Un profesional que usa TensorFlow puede construir cualquier estructura de aprendizaje profundo, como CNN, RNN o una simple red neuronal artificial.

TensorFlow es utilizado principalmente por académicos, nuevas empresas y grandes empresas. Google usa TensorFlow en casi todos los productos diarios de Google, incluidos Gmail, Photo y el motor de búsqueda de Google.

El equipo de Google Brain desarrolló TensorFlow para llenar el vacío entre los investigadores y los desarrolladores de productos. En 2015, hicieron público TensorFlow; está creciendo rápidamente en popularidad. Hoy en día, TensorFlow es la biblioteca de aprendizaje profundo con más repositorios en GitHub.

Los profesionales usan Tensorflow porque es fácil de implementar a escala. Está diseñado para funcionar en la nube o en dispositivos móviles como iOs y Android.

Tensorflow funciona en una sesión. Cada sesión está definida por un gráfico con diferentes cálculos. Un ejemplo simple puede ser multiplicar para numerar. En Tensorflow, se requieren tres pasos:

  1. Definir la variable
X_1 = tf.placeholder(tf.float32, name = "X_1")X_2 = tf.placeholder(tf.float32, name = "X_2")
  1. Definir el cálculo
multiply = tf.multiply(X_1, X_2, name = "multiply")
  1. Ejecuta la operación
with tf.Session() as session:result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})print(result)

Una práctica común en Tensorflow es crear una canalización para cargar los datos. Si sigue estos cinco pasos, podrá cargar datos en TensorFLow

  1. Crea los datos
import numpy as npx_input = np.random.sample((1,2))print(x_input)
  1. Crea el marcador de posición
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
  1. Definir el método del conjunto de datos
dataset = tf.data.Dataset.from_tensor_slices(x)
  1. Crea la canalización
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
  1. Ejecuta el programa
with tf.Session() as sess:sess.run(iterator.initializer, feed_dict={ x: x_input })print(sess.run(get_next))