{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# TensorFlow\n", "\n", "## Sobre TensoFlow\n", "\n", "[TensorFlow](https://www.tensorflow.org/) es una biblioteca open source desarrollada por Google que nos permite realizar cálculos numéricos usando diagramas de flujo de datos. Los nodos del gráfico representan operaciones matemáticas, mientras que los bordes del gráfico representan los arreglos de datos multidimensionales (tensores) comunicados entre ellos. Esta arquitectura flexible le permite realizar los cálculos en más de un CPU o GPU utilizando la misma API.\n", "\n", "## ¿Qué es un diagrama de flujo de datos?\n", "\n", "Los diagramas de flujo de datos describen cálculos matemáticos con un gráfico de direcciones de nodos y bordes. Los nodos normalmente implementan operaciones matemáticas, pero también pueden representar los puntos para alimentarse de datos, devolver resultados, o leer / escribir variables persistentes. Los bordes describen las relaciones de entrada / salida entre los nodos. Estos bordes están representados por los arreglos de datos multidimensionales o tensores. El flujo de los tensores a través del gráfico es de donde [TensorFlow](https://www.tensorflow.org/) recibe su nombre. Los nodos se asignan a los dispositivos computacionales y se ejecutan de forma asincronica y en paralelo una vez que todos los tensores en los bordes de entrada están disponibles.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Operaciones básicas con TensorFlow" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# importamos librerias\n", "import tensorflow as tf\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import matplotlib.cm as cm\n", "import seaborn as sns\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Constantes en TensorFlow" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Creación de Constantes\n", "# El valor que retorna el constructor es el valor de la constante.\n", "\n", "# creamos constantes a=2 y b=3\n", "a = tf.constant(2)\n", "b = tf.constant(3)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Suma de las constantes: 5\n", "Multiplicación de las constantes: 6\n", "Constante elevada al cubo: 8\n" ] } ], "source": [ "# Todo en TensorFlow ocurre dentro de una Sesión\n", "\n", "# creamos la sesion y realizamos algunas operaciones con las constantes\n", "# y lanzamos la sesión\n", "with tf.Session() as sess:\n", " print(\"Suma de las constantes: {}\".format(sess.run(a+b)))\n", " print(\"Multiplicación de las constantes: {}\".format(sess.run(a*b)))\n", " print(\"Constante elevada al cubo: {}\".format(sess.run(a**3)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Variables simbólicas en TensorFlow" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Utilizando variables simbólicas en los grafos\n", "# El valor que devuelve el constructor representa el la salida de la \n", "# variable (la entrada de la variable se define en la sesion)\n", "\n", "# Creamos dos variables de tipo integer\n", "a = tf.placeholder(tf.int16)\n", "b = tf.placeholder(tf.int16)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Defininimos algunas operaciones con estas variables\n", "suma = tf.add(a, b)\n", "mult = tf.mul(a, b)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "suma con variables: 9\n", "Multiplicación con variables: 20\n" ] } ], "source": [ "# Iniciamos la sesion\n", "with tf.Session() as sess:\n", " # ejecutamos las operaciones con cualquier imput que quisiésemos\n", " print(\"suma con variables: {}\".format(sess.run(suma, \n", " feed_dict={a: 4, b: 5})))\n", " print(\"Multiplicación con variables: {}\".format(sess.run(mult, \n", " feed_dict={a: 4, b: 5})))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Operaciones con matrices" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Creamos las matrices como constantes\n", "\n", "# matrices de 3x3\n", "matriz1 = tf.constant([[1, 3, 2],\n", " [1, 0, 0],\n", " [1, 2, 2]])\n", "\n", "matriz2 = tf.constant([[1, 0, 5],\n", " [7, 5, 0],\n", " [2, 1, 1]])\n", "\n", "# suma de matrices\n", "suma = tf.add(matriz1, matriz2)\n", "\n", "# producto de matrices\n", "mult = tf.matmul(matriz1, matriz2)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Suma de matrices: \n", "[[2 3 7]\n", " [8 5 0]\n", " [3 3 3]]\n", "Producto de matrices: \n", "[[26 17 7]\n", " [ 1 0 5]\n", " [19 12 7]]\n" ] } ], "source": [ "# lanzamos la sesion\n", "with tf.Session() as sess:\n", " print(\"Suma de matrices: \\n{}\".format(sess.run(suma)))\n", " print(\"Producto de matrices: \\n{}\".format(sess.run(mult)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ejemplos de TensorFlow con MNIST dataset\n", "\n", "\n", "## MNIST dataset\n", "\n", "[MNIST](http://colah.github.io/posts/2014-10-Visualizing-MNIST/) es un simple conjunto de datos para reconocimiento de imágenes por computadora. Se compone de imágenes de dígitos escritos a mano como los siguientes:\n", "\n", "\n", "\n", "Para más información sobre el dataset visitar el siguiente [enlace](http://colah.github.io/posts/2014-10-Visualizing-MNIST/)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Extracting MNIST_data/train-images-idx3-ubyte.gz\n", "Extracting MNIST_data/train-labels-idx1-ubyte.gz\n", "Extracting MNIST_data/t10k-images-idx3-ubyte.gz\n", "Extracting MNIST_data/t10k-labels-idx1-ubyte.gz\n" ] } ], "source": [ "# importando el dataset\n", "from tensorflow.examples.tutorials.mnist import input_data\n", "mnist = input_data.read_data_sets(\"MNIST_data/\", one_hot=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Explorando MNIST dataset" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(55000, 784)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# forma del dataset 55000 imagenes\n", "mnist.train.images.shape" ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# cada imagen es un array de 28x28 con cada pixel \n", "# definido como escala de grises.\n", "digito1 = mnist.train.images[0].reshape((28, 28))" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nhZHfYMgp/j8dVsU2Wjzm2wAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# visualizando el primer digito\n", "plt.imshow(digito1, cmap = cm.Greys)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "7" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# valor correcto\n", "mnist.train.labels[0].nonzero()[0][0]" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nH27UAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 2da imagen como escala de grises\n", "sns.heatmap(mnist.train.images[1].reshape((28, 28)), linewidth=0,\n", " xticklabels=False, yticklabels=False)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# valor correcto\n", "mnist.train.labels[1].nonzero()[0][0]" ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# visualizando imagenes de 5 en 5\n", "def visualizar_imagenes(dataset, cant_img):\n", " img_linea = 5\n", " lineas = int(cant_img / img_linea)\n", " imagenes = []\n", " for i in range(lineas):\n", " datos = []\n", " for img in dataset[img_linea* i:img_linea* (i+1)]:\n", " datos.append(img.reshape((28,28)))\n", " imgs = np.hstack(datos)\n", " imagenes.append(imgs)\n", " data = np.vstack(imagenes)\n", " plt.imshow(data, cmap = cm.Greys )\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nH7ua8QwAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# visualizando los primeros 30 dígitos\n", "plt.figure(figsize=(8, 8))\n", "visualizar_imagenes(mnist.train.images, 30)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ejemplo con perceptron multicapa\n", "\n", "Un [peceptron multicapa](https://es.wikipedia.org/wiki/Perceptr%C3%B3n) es una de las redes neuronales más simples." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Parametros\n", "learning_rate = 0.001\n", "training_epochs = 15\n", "batch_size = 100\n", "display_step = 1\n", "model_path = \"/home/raul/python/notebooks/perceptron.ckpt\"\n", "logs_path = \"/home/raul/python/notebooks/tensorflow_logs/perceptron\"\n", "\n", "# Parametros de la red\n", "n_hidden_1 = 256 # 1ra capa de atributos\n", "n_hidden_2 = 256 # 1ra capa de atributos\n", "n_input = 784 # datos de MNIST(forma img: 28*28)\n", "n_classes = 10 # Total de clases a clasificar (0-9 digitos)\n", "\n", "# input para los grafos\n", "x = tf.placeholder(\"float\", [None, n_input], name='DatosEntrada')\n", "y = tf.placeholder(\"float\", [None, n_classes], name='Clases')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Creamos el modelo\n", "def multilayer_perceptron(x, weights, biases):\n", " # Función de activación de la capa escondida\n", " layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])\n", " layer_1 = tf.nn.relu(layer_1)\n", " # Función de activación de la capa escondida\n", " layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])\n", " layer_2 = tf.nn.relu(layer_2)\n", " # Salida con activación lineal\n", " out_layer = tf.matmul(layer_2, weights['out']) + biases['out']\n", " return out_layer" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Definimos los pesos y sesgo de cada capa.\n", "weights = {\n", " 'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),\n", " 'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),\n", " 'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))\n", "}\n", "biases = {\n", " 'b1': tf.Variable(tf.random_normal([n_hidden_1])),\n", " 'b2': tf.Variable(tf.random_normal([n_hidden_2])),\n", " 'out': tf.Variable(tf.random_normal([n_classes]))\n", "}\n", "\n", "with tf.name_scope('Modelo'):\n", " # Construimos el modelo\n", " pred = multilayer_perceptron(x, weights, biases)\n", "\n", "with tf.name_scope('Costo'):\n", " # Definimos las funciones de optimización\n", " cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))\n", " \n", "with tf.name_scope('optimizador'):\n", " # optimización\n", " optimizer = tf.train.AdamOptimizer(\n", " learning_rate=learning_rate).minimize(cost)\n", "\n", "with tf.name_scope('Precision'):\n", " # Evaluar el modelo\n", " correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))\n", " # Calcular la precisión\n", " accuracy = tf.reduce_mean(tf.cast(correct_prediction, \"float\"))\n", " \n", "# Inicializamos todas las variables\n", "init = tf.initialize_all_variables()\n", "\n", "# Crear sumarización para controlar el costo\n", "tf.scalar_summary(\"Costo\", cost)\n", "# Crear sumarización para controlar la precisión\n", "tf.scalar_summary(\"Precision\", accuracy)\n", "# Juntar los resumenes en una sola operación\n", "merged_summary_op = tf.merge_all_summaries()\n", "\n", "# Para guardar el modelo\n", "saver = tf.train.Saver()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteración: 001 costo = 154.608782424\n", "Iteración: 002 costo = 39.210747598\n", "Iteración: 003 costo = 24.637626623\n", "Iteración: 004 costo = 17.070282675\n", "Iteración: 005 costo = 12.371249576\n", "Iteración: 006 costo = 9.227733847\n", "Iteración: 007 costo = 6.931624266\n", "Iteración: 008 costo = 5.172826406\n", "Iteración: 009 costo = 3.764516824\n", "Iteración: 010 costo = 2.755332070\n", "Iteración: 011 costo = 2.159830156\n", "Iteración: 012 costo = 1.559957338\n", "Iteración: 013 costo = 1.147375912\n", "Iteración: 014 costo = 0.837389279\n", "Iteración: 015 costo = 0.794107030\n", "Optimización Terminada!\n", "\n", "Precisión: 0.94\n", "Modelo guardado en archivo: /home/raul/python/notebooks/perceptron.ckpt\n", "Ejecutar el comando:\n", " --> tensorboard --logdir=/home/raul/python/notebooks/tensorflow_logs \n", "Luego abir http://0.0.0.0:6006/ en el navegador\n" ] } ], "source": [ "# Lanzamos la sesión\n", "with tf.Session() as sess:\n", " sess.run(init)\n", " \n", " # op to write logs to Tensorboard\n", " summary_writer = tf.train.SummaryWriter(\n", " logs_path, graph=tf.get_default_graph())\n", "\n", " # Entrenamiento\n", " for epoch in range(training_epochs):\n", " avg_cost = 0.\n", " total_batch = int(mnist.train.num_examples/batch_size)\n", "\n", " for i in range(total_batch):\n", " batch_x, batch_y = mnist.train.next_batch(batch_size)\n", " # Optimización por backprop y funcion de costo\n", " _, c, summary = sess.run([optimizer, cost, merged_summary_op],\n", " feed_dict={x: batch_x, y: batch_y})\n", " # escribir logs en cada iteracion\n", " summary_writer.add_summary(summary, epoch * total_batch + i)\n", " # perdida promedio\n", " avg_cost += c / total_batch\n", " # imprimir información de entrenamiento\n", " if epoch % display_step == 0:\n", " print(\"Iteración: {0: 04d} costo = {1:.9f}\".format(epoch+1, \n", " avg_cost))\n", " print(\"Optimización Terminada!\\n\")\n", "\n", " \n", " print(\"Precisión: {0:.2f}\".format(accuracy.eval({x: mnist.test.images,\n", " y: mnist.test.labels})))\n", " # guardar el modelo, luego lo podemos cargar con saver.restore\n", " save_path = saver.save(sess, model_path)\n", " print(\"Modelo guardado en archivo: {}\".format(save_path))\n", " print(\"Ejecutar el comando:\\n\",\n", " \"--> tensorboard --logdir=/home/raul/python/notebooks/tensorflow_logs \",\n", " \"\\nLuego abir http://0.0.0.0:6006/ en el navegador\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## [Red neuronal convolucional de multiples capas](https://es.wikipedia.org/wiki/Redes_neuronales_convolucionales)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Parametros\n", "learning_rate = 0.001\n", "training_iters = 200000\n", "batch_size = 128\n", "display_step = 10\n", "model_path = \"/home/raul/python/notebooks/red_conv.ckpt\"\n", "logs_path = \"/home/raul/python/notebooks/tensorflow_logs/red_conv\"\n", "\n", "# Parametros de la red\n", "n_input = 784 # datos de MNIST (forma img: 28*28)\n", "n_classes = 10 # Total de clases a clasificar (0-9 digitos)\n", "dropout = 0.75 # descarte, probabilidad para mantener las unidades\n", "\n", "# input para los grafos\n", "x = tf.placeholder(tf.float32, [None, n_input])\n", "y = tf.placeholder(tf.float32, [None, n_classes])\n", "keep_prob = tf.placeholder(tf.float32) # para descarte " ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Creando funciones auxiliares y el modelo\n", "def conv2d(x, W, b, strides=1):\n", " # Conv2D con sesgo y activación relu.\n", " x = tf.nn.conv2d(x, W, strides=[1, strides, strides, 1], padding='SAME')\n", " x = tf.nn.bias_add(x, b)\n", " return tf.nn.relu(x)\n", "\n", "\n", "def maxpool2d(x, k=2):\n", " # MaxPool2D \n", " return tf.nn.max_pool(x, ksize=[1, k, k, 1], strides=[1, k, k, 1],\n", " padding='SAME')\n", "\n", "\n", "# Creando la rede\n", "def conv_net(x, weights, biases, dropout):\n", " # cambiando la forma de la imagen\n", " x = tf.reshape(x, shape=[-1, 28, 28, 1])\n", "\n", " # capa de convulción 1\n", " conv1 = conv2d(x, weights['wc1'], biases['bc1'])\n", " # Max Pooling \n", " conv1 = maxpool2d(conv1, k=2)\n", "\n", " # capa de convulción 2\n", " conv2 = conv2d(conv1, weights['wc2'], biases['bc2'])\n", " # Max Pooling \n", " conv2 = maxpool2d(conv2, k=2)\n", "\n", " # capa de conexiones\n", " fc1 = tf.reshape(conv2, [-1, weights['wd1'].get_shape().as_list()[0]])\n", " fc1 = tf.add(tf.matmul(fc1, weights['wd1']), biases['bd1'])\n", " fc1 = tf.nn.relu(fc1)\n", " # aplicando el descarte\n", " fc1 = tf.nn.dropout(fc1, dropout)\n", "\n", " # Salida, predicción de la clase.\n", " out = tf.add(tf.matmul(fc1, weights['out']), biases['out'])\n", " return out" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Definimos los pesos y sesgo de cada capa.\n", "weights = {\n", " # 5x5 conv, 1 entrada, 32 salidas\n", " 'wc1': tf.Variable(tf.random_normal([5, 5, 1, 32])),\n", " # 5x5 conv, 32 entradas, 64 salidas\n", " 'wc2': tf.Variable(tf.random_normal([5, 5, 32, 64])),\n", " # totalmente conectada, 7*7*64 entradas, 1024 salidas\n", " 'wd1': tf.Variable(tf.random_normal([7*7*64, 1024])),\n", " # 1024 entradas, 10 salidas (prediccion)\n", " 'out': tf.Variable(tf.random_normal([1024, n_classes]))\n", "}\n", "\n", "biases = {\n", " 'bc1': tf.Variable(tf.random_normal([32])),\n", " 'bc2': tf.Variable(tf.random_normal([64])),\n", " 'bd1': tf.Variable(tf.random_normal([1024])),\n", " 'out': tf.Variable(tf.random_normal([n_classes]))\n", "}\n", "\n", "# Construcción del modelo\n", "pred = conv_net(x, weights, biases, keep_prob)\n", "\n", "# definiendo las funciones de optimización\n", "cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))\n", "optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)\n", "\n", "# Evaluando el modelo\n", "correct_pred = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))\n", "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))\n", "\n", "# Inicializando las variables\n", "init = tf.initialize_all_variables()\n", "\n", "# Para guardar el modelo\n", "saver = tf.train.Saver()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteración 1280, perdida = 15986.394531, Precisión = 0.39844\n", "Iteración 2560, perdida = 6756.264160, Precisión = 0.64062\n", "Iteración 3840, perdida = 6450.935547, Precisión = 0.68750\n", "Iteración 5120, perdida = 4994.737305, Precisión = 0.79688\n", "Iteración 6400, perdida = 5018.012207, Precisión = 0.75781\n", "Iteración 7680, perdida = 3136.468994, Precisión = 0.83594\n", "Iteración 8960, perdida = 2392.415039, Precisión = 0.86719\n", "Iteración 10240, perdida = 2178.939453, Precisión = 0.85938\n", "Iteración 11520, perdida = 2877.402344, Precisión = 0.85156\n", "Iteración 12800, perdida = 1862.621338, Precisión = 0.85938\n", "Iteración 14080, perdida = 2310.815430, Precisión = 0.89062\n", "Iteración 15360, perdida = 1362.903687, Precisión = 0.90625\n", "Iteración 16640, perdida = 1552.097534, Precisión = 0.92969\n", "Iteración 17920, perdida = 1975.235474, Precisión = 0.91406\n", "Iteración 19200, perdida = 1421.253784, Precisión = 0.96094\n", "Iteración 20480, perdida = 890.894653, Precisión = 0.93750\n", "Iteración 21760, perdida = 2912.382324, Precisión = 0.87500\n", "Iteración 23040, perdida = 1152.538208, Precisión = 0.92969\n", "Iteración 24320, perdida = 906.505371, Precisión = 0.92969\n", "Iteración 25600, perdida = 690.674683, Precisión = 0.96094\n", "Iteración 26880, perdida = 1855.817627, Precisión = 0.90625\n", "Iteración 28160, perdida = 1120.228760, Precisión = 0.92969\n", "Iteración 29440, perdida = 1528.879639, Precisión = 0.91406\n", "Iteración 30720, perdida = 1286.648560, Precisión = 0.92188\n", "Iteración 32000, perdida = 583.858826, Precisión = 0.92969\n", "Iteración 33280, perdida = 977.640320, Precisión = 0.91406\n", "Iteración 34560, perdida = 557.723267, Precisión = 0.94531\n", "Iteración 35840, perdida = 947.495361, Precisión = 0.93750\n", "Iteración 37120, perdida = 134.786316, Precisión = 0.97656\n", "Iteración 38400, perdida = 616.427002, Precisión = 0.96094\n", "Iteración 39680, perdida = 1603.583374, Precisión = 0.90625\n", "Iteración 40960, perdida = 949.720215, Precisión = 0.93750\n", "Iteración 42240, perdida = 137.855408, Precisión = 0.96875\n", "Iteración 43520, perdida = 612.963684, Precisión = 0.95312\n", "Iteración 44800, perdida = 793.080994, Precisión = 0.93750\n", "Iteración 46080, perdida = 400.291870, Precisión = 0.96875\n", "Iteración 47360, perdida = 1150.624634, Precisión = 0.93750\n", "Iteración 48640, perdida = 258.709290, Precisión = 0.97656\n", "Iteración 49920, perdida = 2207.816406, Precisión = 0.91406\n", "Iteración 51200, perdida = 400.266846, Precisión = 0.95312\n", "Iteración 52480, perdida = 613.738770, Precisión = 0.93750\n", "Iteración 53760, perdida = 618.174377, Precisión = 0.92188\n", "Iteración 55040, perdida = 512.429932, Precisión = 0.95312\n", "Iteración 56320, perdida = 1215.754028, Precisión = 0.89062\n", "Iteración 57600, perdida = 612.911743, Precisión = 0.95312\n", "Iteración 58880, perdida = 385.637512, Precisión = 0.96094\n", "Iteración 60160, perdida = 517.072632, Precisión = 0.92969\n", "Iteración 61440, perdida = 436.352966, Precisión = 0.92969\n", "Iteración 62720, perdida = 1290.541992, Precisión = 0.93750\n", "Iteración 64000, perdida = 328.226868, Precisión = 0.96875\n", "Iteración 65280, perdida = 606.013489, Precisión = 0.95312\n", "Iteración 66560, perdida = 1042.394531, Precisión = 0.92969\n", "Iteración 67840, perdida = 160.461609, Precisión = 0.97656\n", "Iteración 69120, perdida = 231.197266, Precisión = 0.97656\n", "Iteración 70400, perdida = 535.258850, Precisión = 0.94531\n", "Iteración 71680, perdida = 971.498901, Precisión = 0.92188\n", "Iteración 72960, perdida = 542.642090, Precisión = 0.94531\n", "Iteración 74240, perdida = 578.589294, Precisión = 0.96094\n", "Iteración 75520, perdida = 339.135193, Precisión = 0.95312\n", "Iteración 76800, perdida = 505.489319, Precisión = 0.96094\n", "Iteración 78080, perdida = 347.828766, Precisión = 0.94531\n", "Iteración 79360, perdida = 907.295898, Precisión = 0.92188\n", "Iteración 80640, perdida = 450.875153, Precisión = 0.96875\n", "Iteración 81920, perdida = 153.763977, Precisión = 0.97656\n", "Iteración 83200, perdida = 645.537537, Precisión = 0.92188\n", "Iteración 84480, perdida = 666.158875, Precisión = 0.94531\n", "Iteración 85760, perdida = 427.193176, Precisión = 0.96094\n", "Iteración 87040, perdida = 507.789551, Precisión = 0.93750\n", "Iteración 88320, perdida = 298.031189, Precisión = 0.95312\n", "Iteración 89600, perdida = 162.407578, Precisión = 0.96094\n", "Iteración 90880, perdida = 348.540009, Precisión = 0.93750\n", "Iteración 92160, perdida = 1396.949463, Precisión = 0.88281\n", "Iteración 93440, perdida = 336.582031, Precisión = 0.96094\n", "Iteración 94720, perdida = 542.623047, Precisión = 0.93750\n", "Iteración 96000, perdida = 402.476440, Precisión = 0.95312\n", "Iteración 97280, perdida = 287.080688, Precisión = 0.94531\n", "Iteración 98560, perdida = 135.359390, Precisión = 0.97656\n", "Iteración 99840, perdida = 150.416168, Precisión = 0.98438\n", "Iteración 101120, perdida = 342.992798, Precisión = 0.94531\n", "Iteración 102400, perdida = 231.865524, Precisión = 0.97656\n", "Iteración 103680, perdida = 669.114685, Precisión = 0.95312\n", "Iteración 104960, perdida = 558.278931, Precisión = 0.89844\n", "Iteración 106240, perdida = 368.404968, Precisión = 0.94531\n", "Iteración 107520, perdida = 112.701668, Precisión = 0.98438\n", "Iteración 108800, perdida = 116.765099, Precisión = 0.98438\n", "Iteración 110080, perdida = 165.073608, Precisión = 0.96094\n", "Iteración 111360, perdida = 187.182037, Precisión = 0.96875\n", "Iteración 112640, perdida = 215.461563, Precisión = 0.97656\n", "Iteración 113920, perdida = 569.885376, Precisión = 0.94531\n", "Iteración 115200, perdida = 185.075653, Precisión = 0.96875\n", "Iteración 116480, perdida = 134.897095, Precisión = 0.97656\n", "Iteración 117760, perdida = 248.993500, Precisión = 0.95312\n", "Iteración 119040, perdida = 428.411987, Precisión = 0.94531\n", "Iteración 120320, perdida = 223.545090, Precisión = 0.97656\n", "Iteración 121600, perdida = 203.086914, Precisión = 0.95312\n", "Iteración 122880, perdida = 177.018967, Precisión = 0.97656\n", "Iteración 124160, perdida = 382.593323, Precisión = 0.96094\n", "Iteración 125440, perdida = 218.252426, Precisión = 0.98438\n", "Iteración 126720, perdida = 213.570358, Precisión = 0.96094\n", "Iteración 128000, perdida = 121.002808, Precisión = 0.95312\n", "Iteración 129280, perdida = 190.202850, Precisión = 0.96094\n", "Iteración 130560, perdida = 197.318115, Precisión = 0.96875\n", "Iteración 131840, perdida = 278.134430, Precisión = 0.95312\n", "Iteración 133120, perdida = 157.393845, Precisión = 0.97656\n", "Iteración 134400, perdida = 1013.938354, Precisión = 0.91406\n", "Iteración 135680, perdida = 319.466187, Precisión = 0.97656\n", "Iteración 136960, perdida = 214.150253, Precisión = 0.96094\n", "Iteración 138240, perdida = 168.319016, Precisión = 0.98438\n", "Iteración 139520, perdida = 146.133636, Precisión = 0.97656\n", "Iteración 140800, perdida = 0.000000, Precisión = 1.00000\n", "Iteración 142080, perdida = 163.648758, Precisión = 0.96875\n", "Iteración 143360, perdida = 155.861252, Precisión = 0.96875\n", "Iteración 144640, perdida = 514.966431, Precisión = 0.92969\n", "Iteración 145920, perdida = 122.524651, Precisión = 0.96875\n", "Iteración 147200, perdida = 629.005371, Precisión = 0.96094\n", "Iteración 148480, perdida = 133.938232, Precisión = 0.97656\n", "Iteración 149760, perdida = 152.338928, Precisión = 0.96875\n", "Iteración 151040, perdida = 233.781708, Precisión = 0.95312\n", "Iteración 152320, perdida = 249.449448, Precisión = 0.96875\n", "Iteración 153600, perdida = 247.225983, Precisión = 0.96094\n", "Iteración 154880, perdida = 10.728134, Precisión = 0.99219\n", "Iteración 156160, perdida = 248.826996, Precisión = 0.98438\n", "Iteración 157440, perdida = 20.018723, Precisión = 0.98438\n", "Iteración 158720, perdida = 78.384727, Precisión = 0.96875\n", "Iteración 160000, perdida = 468.122406, Precisión = 0.95312\n", "Iteración 161280, perdida = 155.663757, Precisión = 0.96875\n", "Iteración 162560, perdida = 150.710541, Precisión = 0.96094\n", "Iteración 163840, perdida = 242.338455, Precisión = 0.97656\n", "Iteración 165120, perdida = 31.185051, Precisión = 0.98438\n", "Iteración 166400, perdida = 110.294464, Precisión = 0.98438\n", "Iteración 167680, perdida = 182.647125, Precisión = 0.96094\n", "Iteración 168960, perdida = 113.131668, Precisión = 0.97656\n", "Iteración 170240, perdida = 276.484894, Precisión = 0.98438\n", "Iteración 171520, perdida = 127.653786, Precisión = 0.96875\n", "Iteración 172800, perdida = 134.319214, Precisión = 0.97656\n", "Iteración 174080, perdida = 231.960983, Precisión = 0.96875\n", "Iteración 175360, perdida = 210.773346, Precisión = 0.97656\n", "Iteración 176640, perdida = 135.835693, Precisión = 0.97656\n", "Iteración 177920, perdida = 177.216400, Precisión = 0.98438\n", "Iteración 179200, perdida = 4.674934, Precisión = 0.98438\n", "Iteración 180480, perdida = 67.045883, Precisión = 0.98438\n", "Iteración 181760, perdida = 382.801605, Precisión = 0.95312\n", "Iteración 183040, perdida = 30.982941, Precisión = 0.98438\n", "Iteración 184320, perdida = 178.160370, Precisión = 0.97656\n", "Iteración 185600, perdida = 9.528229, Precisión = 0.99219\n", "Iteración 186880, perdida = 24.242599, Precisión = 0.99219\n", "Iteración 188160, perdida = 57.838909, Precisión = 0.97656\n", "Iteración 189440, perdida = 264.432556, Precisión = 0.96875\n", "Iteración 190720, perdida = 238.160339, Precisión = 0.95312\n", "Iteración 192000, perdida = 383.306152, Precisión = 0.96875\n", "Iteración 193280, perdida = 199.790680, Precisión = 0.96094\n", "Iteración 194560, perdida = 242.887024, Precisión = 0.96094\n", "Iteración 195840, perdida = 203.611725, Precisión = 0.96875\n", "Iteración 197120, perdida = 305.651733, Precisión = 0.94531\n", "Iteración 198400, perdida = 29.270210, Precisión = 0.98438\n", "Iteración 199680, perdida = 87.948402, Precisión = 0.98438\n", "Optimización terminada!\n", "Testing Accuracy: 0.99\n", "Modelo guardado en archivo: /home/raul/python/notebooks/red_conv.ckpt\n" ] } ], "source": [ "# Lanzando la sesion\n", "with tf.Session() as sess:\n", " sess.run(init)\n", " step = 1\n", " # mantener entrenando hasta alcanzar el maximo de iteraciones\n", " while step * batch_size < training_iters:\n", " batch_x, batch_y = mnist.train.next_batch(batch_size)\n", " # Run optimization op (backprop)\n", " sess.run(optimizer, feed_dict={x: batch_x, y: batch_y,\n", " keep_prob: dropout})\n", " if step % display_step == 0:\n", " # Calcular la perdida y la precisión del lote\n", " loss, acc = sess.run([cost, accuracy], feed_dict={x: batch_x,\n", " y: batch_y,\n", " keep_prob: 1.})\n", " print(\"Iteración {0:}, perdida = {1:.6f}, Precisión = {2:.5f}\"\n", " .format(str(step*batch_size), loss, acc))\n", " step += 1\n", " print(\"Optimización terminada!\")\n", "\n", " # Calcular la precisión sobre el dateset de evaluación.\n", " print(\"Testing Accuracy: {0: .2f}\".format(\n", " sess.run(accuracy, feed_dict={x: mnist.test.images[:256],\n", " y: mnist.test.labels[:256],\n", " keep_prob: 1.})))\n", " # guardar el modelo, luego lo podemos cargar con saver.restore\n", " save_path = saver.save(sess, model_path)\n", " print(\"Modelo guardado en archivo: {}\".format(save_path))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ejemplo con Regresión Softmax" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La [regresión softmax](https://es.wikipedia.org/wiki/Regresi%C3%B3n_log%C3%ADstica_multinomial) es una generalización del clásico modelo de [regresión logística](https://es.wikipedia.org/wiki/Regresi%C3%B3n_log%C3%ADstica) para los casos en que tenemos que clasificar más de dos *clases*. Con [TensorFlow](https://www.tensorflow.org/) se puede implementar de forma muy sencilla. " ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# definimos la variable simbólica para para realizar los computos\n", "x = tf.placeholder(tf.float32, [None, 784])" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# definimos dos variables para los parámetros y los iniciamos con ceros\n", "W = tf.Variable(tf.zeros([784, 10]))\n", "b = tf.Variable(tf.zeros([10]))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# definimos el modelo de regresion multinominal.\n", "y = tf.nn.softmax(tf.matmul(x, W) + b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Entrenamiento" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# definimos una variable simbólica para los resultados.\n", "y_ = tf.placeholder(tf.float32, [None, 10])\n", "\n", "# aplicamos entropia cruzada\n", "cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), \n", " reduction_indices=[1]))\n", "\n", "# definimos el proceso de entrenamiento aplicando el algoritmo de\n", "# gradiente descendiente optimizando al mínimo la entropia cruzada\n", "train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)\n", "\n", "# iniciamos todas las variables\n", "init = tf.initialize_all_variables()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Precisión: 0.92\n" ] } ], "source": [ "# lanzamos la sesion\n", "with tf.Session() as sess:\n", " sess.run(init)\n", " \n", " # entrenamos el modelo\n", " for i in range(1000):\n", " batch_xs, batch_ys = mnist.train.next_batch(100)\n", " sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})\n", " \n", " # evaluamos el modelo\n", " correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))\n", " accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n", " \n", " # imprimimos precision\n", " print(\"Precisión: {0: .2f}\".format(sess.run(accuracy, \n", " feed_dict={x: mnist.test.images, y_: mnist.test.labels}))) " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1+" } }, "nbformat": 4, "nbformat_minor": 0 }