TensorFlow Mecánica 101
Código: tensorflow / ejemplos / tutoriales / mnist /
El objetivo de este tutorial es mostrar cómo usar TensorFlow para entrenar y evaluar una sencilla red neuronal de tipo Feedforward que clasifica números escritos de forma manual, usando la base de datos MNIST. El público objetivo de este tutorial son aquellos que tengan experciencia en el uso de máquinas de aprendizaje y que esten interesados en utilizar TensorFlow.
En terminos generales estos tutoriales no pretenden enseñar sobre máquinas de aprendizaje.
Por favor asegúrese de haber seguido correctamente las instrucciones para instalar TensorFlow .
Archivos de este tutorial
Este tutorial hace referencia a los siguientes archivos:
Archivo | Propósito |
---|---|
mnist.py | El código para desarrollar un modelo MNIST plenamente conectado (fully-connected MNIST) |
fully_connected_feed.py | El código para entrenar el modelo MNIST con el conjunto de datos descargados usando un diccionario de alimentación. |
Solo es necesario ejecutar el programa fully_connected_feed.py para comenzar el entrenamiento:
python fully_connected_feed.py
Preparación de los Datos
MNIST es un problema clásico del aprendizaje de máquina. Consiste en análizar las imágenes de los números escritos a mano de tamaño 28x28 píxeles y que estan en una escala de grises para determinar qué dígito representa la imagen, esto incluye todos los números desdee el cero hasta nueve.
Para obtener más información, consulte las página ...
Descargas
Al inicio del método run_training(), la función input_data.read_data_sets() se encarga de que los datos para el entrenamiento hayan sido descargados a su carpeta local y despues los descomprime para devolver un diccionario de instancias tipo DataSet.
data_sets = input_data.read_data_sets(FLAGS.train_dir, FLAGS.fake_data)
NOTA: El indicador fake_data se utiliza con el fun de realizar pruebas unitarias y puede ser omitido por el lector.
Datos | Propósito |
---|---|
data_sets.train | 55000 imagenes y nombres para el entrenamiento principal |
data_sets.validation | 5000 imagenes y nombres para validar periodicamente la precisión del entrenamiento |
data_sets.test | 10000 imagenes y nombres, para las pruebas finales de cuan preciso es el entrenamiento |
Para obtener más información acerca de los datos, por favor lea el tutorial sobre descargas.
Entradas y marcadores de posición
La función placeholder_inputs() crea dos operaciones tf.placeholder que definen como son las entradas, incluyendo el tamaño (batch_size), esto es para el resto de la gráfica y es con la que se poblaran los ejemplos.
images_placeholder = tf.placeholder(tf.float32, shape=(batch_size, mnist.IMAGE_PIXELS))
labels_placeholder = tf.placeholder(tf.int32, shape=(batch_size)
Mas abajo en el cada ciclo del loop de entrenamiento, cada imagen se separa de su etiqueta para ajustar el batch_size, luego se asocia un marcador de posición y el resultado se pasa como valor dentro parametro feed_dict en la función sess.run().
Construyendo el gráfico
Despues de haber creado los marcadores de posición de los datos, el gráfico se construye a partir del programa mnist.py de acuerdo con el siguiente patrón de tres etapas: inference(), loss(), and training().
- inference(): construye el gráfico a medida que se vaya requiriendo para ejecutar la red neuronal (con propagación hacia adelante) y realizar las predicciones.
- loss(): agrega al gráfico de inferencia las operaciones requeridas para poder generar la perdida.
- training(): agrega al gráfico de perdida las operaciones requeridas para calcular y aplicar los gradientes.
Inferencia
La función de inferencia construye el gráfico a medida que se vaya necesitando para retornar el tensor que puede contener las predicciones.