Skip to content

Instantly share code, notes, and snippets.

@eblancoh
Created April 23, 2018 07:52
Show Gist options
  • Save eblancoh/0e1edae4ee70bb720efd59e3eb64b6cf to your computer and use it in GitHub Desktop.
Save eblancoh/0e1edae4ee70bb720efd59e3eb64b6cf to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Sintaxis básica en TensorFlow"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/eblancoh/anaconda3/envs/universe/lib/python3.5/site-packages/h5py/__init__.py:34: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
" from ._conv import register_converters as _register_converters\n"
]
}
],
"source": [
"# Importamos la librería TensorFlow\n",
"import tensorflow as tf"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.6.0\n"
]
}
],
"source": [
"# Podemos verificar la versión de la librería que tenemos instalada en nuestro entorno\n",
"print(tf.__version__)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Definición de tensores"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Comencemos creando los tensores más sencillos que existen. Definimos un par de constantes mediante tf.constant()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"hola = tf.constant('Hola ')\n",
"mundo = tf.constant('Mundo')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Podemos hacer la suma de ambas variables\n",
"resultado = hola + mundo"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Si comprobamos el type de este objeto no vamos a obtener un string. Obtendremos un object definido como Tensor. "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"tensorflow.python.framework.ops.Tensor"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(resultado)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tensor(\"Const:0\", shape=(), dtype=string) Tensor(\"Const_1:0\", shape=(), dtype=string) Tensor(\"add:0\", shape=(), dtype=string)\n"
]
}
],
"source": [
"# Si hacemos un \"print\" de cualquiera de esas variables, no vamos a obtener el string introducido\n",
"print (hola, mundo, resultado)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Como vemos a continuación, \"hola\" y \"mundo\" quedan definidos como constantes de type string, mientras que resultado se define como una suma de tensores de type string.\n",
"Para poder obtener el valor de las variables definidas como Tensor, debemos iniciar una sesión. Sin preocuparnos de abrir, ejecutar el bloque de código y cerrar la sesión, abrimos la misma con un \"with\":\n",
"\n",
"De lo contrario, se debería proceder:\n",
"\n",
"> sess = tf.Session()\n",
"\n",
"> sess.run(...)\n",
"\n",
"> sess.close()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"with tf.Session() as sess:\n",
" resultado = sess.run(hola + mundo)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"b'Hola Mundo'"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# La b antes del string que vamos a obtener de la ejecución de este comando indica en Python 3 que esto \n",
"# es bytes literal\n",
"resultado"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vamos a definir dos variables numéricas y a multiplicarlas:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"num_1 = tf.constant(2)\n",
"num_2 = tf.constant(3)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"tensorflow.python.framework.ops.Tensor"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(num_1)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<tf.Tensor 'mul:0' shape=() dtype=int32>"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# La multiplicación de estos dos elementos devuelve un tensor de type int32\n",
"num_1 * num_2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Para poder obtener el resultado de multiplicar ambas constantes, volvemos a abrir una sesión al igual que en nuestro ejemplo Hola Mundo."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"with tf.Session() as sess:\n",
" resultado = sess.run(num_1 * num_2)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"6"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resultado "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Multiplicación de Matrices"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"En esta breve sección se indicará cómo realizar la multiplicación de matrices"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Definimos una matriz A de tamaño 4x3 con valores alteatorios de distribución normal.\n",
"# Tenemos la posibilidad de especificar la media y su std-dev\n",
"A = tf.random_normal((4,4), mean=0, stddev=0.5)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"TensorShape([Dimension(4), Dimension(4)])"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Con el comando .get_shape() somos capaces de obtener la dimensionalidad de un tensor\n",
"A.get_shape()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Podemos definifir también una matriz de dimensiones 3x2 rellena con valores aleatorios de\n",
"# una distribución uniforme\n",
"B = tf.random_uniform((4,2), minval=0, maxval=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Se pueden definir muchos otros tipos de matriz como:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Devuelve una matriz de la dimensión especificada rellena con un valor\n",
"mat_fill = tf.fill((4,4), 10)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Para generar una matriz de ceros de la dimensión deseada\n",
"myzeros = tf.zeros((4,4))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Crear la matriz identidad, como por ejemplo\n",
"myident = tf.eye(4)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# También podemos construir tensores de unos de la dimensión que queramos\n",
"myones = tf.ones((4,4))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Con la función tf.matmul(mat_1, mat_2) se pueden multiplicar dos matrices."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Definimos nuestro resultado como la multiplicación de A * B\n",
"resultado = tf.matmul(A, B)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Abrimos una sesión que nos permita realizar la operación de matrices y obtener la variable resultado\n",
"with tf.Session() as sess:\n",
" resultado = sess.run(tf.matmul(A, B))"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.1545255 , 0.4360115 ],\n",
" [-0.01203179, -0.8854532 ],\n",
" [ 0.99524254, 0.42805576],\n",
" [ 0.03373602, -0.38314834]], dtype=float32)"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resultado"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La dimensionalidad de la matriz es la esperada de la multiplicación de una de tamaño 4x4 y otra de tamaño 4x2"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(4, 2)"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resultado.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sesiones interactivas "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"El siguiente recurso puede resultar útil en el caso de que deseemos trabajar en Notebooks."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Sólo es necesario ejecutar esta línea una sóla vez por Notebook\n",
"sess = tf.InteractiveSession()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"De esta manera podemos ahorrarnos la necesidad de abrir, ejecutar y cerrar una sesión cada vez que queramos evaluar una variable o cualquier operación.\n",
"Por ejemplo, hagamos una multiplicación de matrices y evaluemos el resultado:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"C = tf.matmul(myones, myident)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Podemos evaluar una variable haciendo uso de .eval(). Como vemos abajo, el resultado de multiplicar una matriz por la identidad es la misma matriz."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[1., 1., 1., 1.],\n",
" [1., 1., 1., 1.],\n",
" [1., 1., 1., 1.],\n",
" [1., 1., 1., 1.]], dtype=float32)"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"C.eval()"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [default]",
"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.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment