Skip to content

Instantly share code, notes, and snippets.

@eblancoh
Created May 22, 2018 12:43
Show Gist options
  • Save eblancoh/d39de37939e56903b3f2695c99dd19b7 to your computer and use it in GitHub Desktop.
Save eblancoh/d39de37939e56903b3f2695c99dd19b7 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Creando nuestras primeras neuronas"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import tensorflow as tf\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Elegimos una semilla para números aleatorios\n",
"np.random.seed(123)\n",
"tf.set_random_seed(123)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Creamos un par de variables aleatorias: `random_a` y `random_b`."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 13.92938371, 5.7227867 , 4.53702907, 11.02629538],\n",
" [ 14.3893794 , 8.4621292 , 19.61528397, 13.69659477],\n",
" [ 9.61863803, 7.84235036, 6.86356032, 14.58099415],\n",
" [ 8.77144489, 1.19355793, 7.96088511, 14.75990811]])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"random_a = np.random.uniform(0, 20, (4, 4))\n",
"random_a"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 3.64983461],\n",
" [ 3.50903512],\n",
" [ 10.63102748],\n",
" [ 10.63655174]])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"random_b = np.random.uniform(0, 20, (4, 1))\n",
"random_b"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Creamos los `placeholders` correspondientes como `float32`"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = tf.placeholder(tf.float32)\n",
"b = tf.placeholder(tf.float32)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Definimos dos operaciones: una de suma y otra de multiplicación."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#tf.add(a,b)\n",
"sum_operator = a + b\n",
"\n",
"#tf.multiply(a,b)\n",
"mult_operator = a * b "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ejecutando una sesión, es posible obtener el resultado de las dos operaciones arriba indicadas."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 17.57921791 9.37262154 8.1868639 14.67613029]\n",
" [ 17.89841461 11.9711647 23.12431908 17.20563126]\n",
" [ 20.24966431 18.47337723 17.49458694 25.21202087]\n",
" [ 19.40799713 11.8301096 18.5974369 25.39645958]]\n",
"\n",
"\n",
"[[ 50.83994675 20.8872261 16.55940628 40.24415588]\n",
" [ 50.492836 29.6939106 68.83071899 48.06183243]\n",
" [ 102.25600433 83.37223816 72.96669769 155.01095581]\n",
" [ 93.29793549 12.69534111 84.67636871 156.99452209]]\n"
]
}
],
"source": [
"with tf.Session() as sess:\n",
" add_result = sess.run(sum_operator, feed_dict = {a: random_a, b: random_b})\n",
" print(add_result)\n",
" \n",
" print('\\n')\n",
" \n",
" mult_result = sess.run(mult_operator, feed_dict = {a: random_a, b: random_b})\n",
" print(mult_result)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Ejemplo de Red Neuronal"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Definimos el número de variables y el número de neuronas que tendrá nuestra primera capa\n",
"n_features = 10\n",
"n_dense_neurons = 5"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Placeholder para una variable x de dimensión [?, n_features]\n",
"x = tf.placeholder(tf.float32, (None, n_features), name = 'x')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Definimos las matrices correspondientes a los bias y los pesos W\n",
"b = tf.Variable(tf.zeros([n_dense_neurons]), name = 'bias')\n",
"\n",
"W = tf.Variable(tf.random_normal([n_features, n_dense_neurons]), name = 'W')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Definición de la función de activación"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Definimos el producto de las dos matrices x y W\n",
"W_x = tf.matmul(x, W)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# La salida de la capa de neuronas z = W·x + b\n",
"z = tf.add(W_x, b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Desde un terminal seremos capaces de lanzar TensorBoard. Las instrucciones quedan indicadas después de este notebook."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# tf.nn.relu() or tf.tanh()\n",
"activation = tf.sigmoid(z)"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"¡No debemos olvidarnos de inicializar las variables!"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Puede resultar interesante acceder a la funcionalidad de visualización de grafos soportada por TensorFlow. Para ello, debemos generar un summary data del que pueda generarse el resumen del grafo en TensorBoard dentro de la ejecución de la propia sesión."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"with tf.Session() as sess:\n",
" sess.run(init)\n",
" # Para obtener la salida a nuestra capa de 5 neuronas, indicamos la función de activación (operación)\n",
" # y le pasamos como variabl un array aletaorio de dimensión [1, n_features]\n",
" layer_out = sess.run(activation, feed_dict={x : np.random.random([1, n_features])})\n",
" \n",
" # sess.graph contiene la definición del grafo. Con esto habilitaremos el Graph Visualizer en tensorboard.\n",
" \n",
" file_writer = tf.summary.FileWriter(\"log/neural_network_tensorflow/\", sess.graph)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 0.71805179 0.83095247 0.54439819 0.9794479 0.35519969]]\n"
]
}
],
"source": [
"print(layer_out)"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"A continuación, procederemos con el proceso de optimización."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Ejemplo de Regresión Lineal con TensorFlow"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"Para ello, trabajaremos con un ejemplo de regresión, donde buscaremos resolver el sencillo ajuste:\n",
"y = m·x + b\n",
"\n",
"Nuestra misión es aproximar la pendiente \"m\" y el punto de corte con el eje de ordenadas \"b\", de tal forma que \n",
"se minimice la distancia de la recta a todos los puntos representados."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Fabricaremos algunas variables independientes aleatorias:\n",
"x_data = np.linspace(0,50,50) + np.random.uniform(-0.5,0.5,50)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"y_label = np.linspace(0,10,50) + np.random.uniform(-1.5,1.5,50)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nAgBI3P8DadMNTsdQB6cAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f1470050b00>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(x_data, y_label, s = 7)\n",
"plt.grid()\n",
"plt.xlabel(\"x\")\n",
"plt.ylabel(\"y\")\n",
"plt.show()"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"Resulta sencillo definir una función de error que minimizar entre el valor observado \n",
"y el predicho por nuestro modelo. "
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Inicializamos con valores aleatorios como variables la pendiente y la intersección \n",
"# de nuestra recta a ajustar a los datos.\n",
"misc = np.random.rand(2)\n",
"\n",
"m = tf.Variable(misc[0], dtype = tf.float32)\n",
"b = tf.Variable(misc[1], dtype = tf.float32)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Definición de una función de coste"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Definimos al inicio un error nulo\n",
"error = 0\n",
"for x, y in zip(x_data, y_label):\n",
" # Nuestro valor predicho\n",
" y_pred = m * x + b\n",
" # Definimos la función de coste. en este caso hacemos uso de la típica RMS.\n",
" # ¡Necesitaremos una función de optimización para la minimización!\n",
"\n",
" error += (y - y_pred)**2"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"Definimos el optimizador a usar. Necesitamos indicarle una tasa de aprendizaje inicial."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"optimizer = tf.train.GradientDescentOptimizer(learning_rate = 1e-5)\n",
"# Elegir learning rates muy elevadas puede provocar que la solución posterior diverja.\n",
"# Buscamos minimizar el optimizador anterior.\n",
"train = optimizer.minimize(error)"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"¡Inicializamos las variables con tf.global_variables_initializer()!"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"init = tf.global_variables_initializer()"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"Se crea y se ejecuta la sesión"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"with tf.Session() as sess:\n",
"\n",
" sess.run(init)\n",
" # Elegimos un número de epochs en el que entrenar nuestra red\n",
" epochs = 100\n",
" for i in range(epochs):\n",
" sess.run(train)\n",
" \n",
" # Los resultados de la pendiente y el punto de intersección se pueden obtener fácilmente\n",
" final_m , final_b = sess.run([m, b])\n",
" \n",
" file_writer = tf.summary.FileWriter(\"log/neural_network_tensorflow/\", sess.graph)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.197661 0.140447\n"
]
}
],
"source": [
"print(final_m, final_b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evaluación del ajuste"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Elegimos un conjunto de variables independientes de prueba y obtenemos su predicción \n",
"x_test = np.linspace(0, 50, 50)\n",
"y_test = final_m * x_test + final_b"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nASd0cH+hnLl1AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f145542c940>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(x_data,y_label, s = 7)\n",
"plt.plot(x_test, y_test, 'r', linewidth = .75)\n",
"plt.grid()\n",
"plt.xlabel(\"x\")\n",
"plt.ylabel(\"y\")\n",
"plt.show()"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"La línea roja estimada por nuestro modelo se ajusta adecuadamente a la nube de puntos."
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"El coeficiente de determinación r-squared nos dará la bondad de nuestro ajuste:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Suma de los cuadrados de los residuos:\n",
"SS_res = np.sum((y_label - (final_m * x_data + final_b))**2)\n",
"# La suma de los cuadrados totales se define como:\n",
"SS_tot = np.sum((y_label - np.mean(y_label))**2)\n",
"\n",
"# El coeficiente r**2 se define como:\n",
"r_squared = 1 - SS_res/SS_tot"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.92950159578413183"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r_squared"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"Muy cercano a 1. Nuestro ajuste es satisfactorio."
]
}
],
"metadata": {
"anaconda-cloud": {},
"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.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment