Skip to content

Introducción a Tensorflow

Sandra Lucia edited this page Oct 18, 2018 · 1 revision

Tensorflow

Tensorflow es una librería open-source que permite hacer operaciones matemáticas de manera sencilla. Es simbolica y dinámica. Basta con indicar el flujo de la información, y, en la mayoría de los casos, no es necesario definir completamente las variables de entrada.

Hay varios aspectos que debemosconsiderar:

  • Tensorflow: Grafos vs Eager
  • APIs: layers, keras, train

Grafos vs Eager

tf 1.7 -> Eager

Tensorflow Grafos

  • Se define el flujo de la información.
  • Se crea una sesión que manejará al grafo.
  • Se inicializan las variables que contengan valores aleatoreos.
  • Se manda llamar el nodo del grafo de interes, se incluye los valores de entrada necesarios

Elementos importantes

  • Tensor Contenedor que agrupa a la información de manera vectorial/matricial.
  • Placeholder Son el punto de entrada de la información a nuestro grafo. Será un tensor.
  • Variable Contiene a variables que necesitan ser inicializadas, y que pueden cambiar en el transcurso de la ejecución del grafo. Puede ser un tensor o cualquier otro tipo con cualquier forma.
  • Constant Define a un tensor que contendrá valores inmutables.
  • Session Es el encapsulamiento requerido para ejecutar las operaciones de tensorflow.
  • Run Metodo utilizado para ejecutar las operaciones tensorflow, y la forma con que se introduce la información al gráfo.
  • Feed Dictionary Contenedor de los valores a ser procesados en el grafo.

Cosas importantes

Shape of a tensor (get_shape())


Importar TensorFlow

import tensorflow as tf

Constant

# Se definen las constantes
a = tf.constant(1.)
b = tf.constant(1.5)
# Se define la operación
c = tf.add(a,b)

# Se crea una sesion
sess = tf.Session()

# Se ejecutan el grafo como fue definido previamente
# y se obtiene el valor de c
resultado = sess.run(c)

print(resultado) # 2.5

ó

# Se definen las constantes
a = tf.constant(1.)
b = tf.constant(1.5)
# Se define la operación
c = a + b

# Se crea una sesion
sess = tf.Session()

# Se ejecuta el grafo como fue definido previamente
# y se obtiene el valor de c
resultado = sess.run(c)

print(resultado) # 2.5

Variable

# Se crea la variable y se le asigna el valor que tendrá.
a = tf.Variable(100.)
# Se define la operación. Disminuirá el valor de a en 1 cada 
# vez que se ejecute esta operación
b = tf.assign_sub(1.)

# Se crea una sesion
sess = tf.Session()

# Se inicializan las variables.
#Las variables requieren ser inicializadas, en caso contrario tf arrojará un error
sess.run(tf.global_variables_initializer())

# Se ejecuta el grafo como fue definido previamente
# y se obtiene el valor de b
resultado = sess.run(b)

print(resultado) # 99.0

Placeholders

# Se crea la variable de entrada que aceptará float32 y su forma
# será como un número comun.
a = tf.palcehoder(tf.float32,shape=[])
# Se crea una constante con valor 2.0
b = tf.constant(2.)
# Se define la operación de multiplicación
c = tf.multiply(a,b)

# Se crea una sesion
sess = tf.Session()

# Creamos un diccionario que contiene los valores
# que serán introducidos al grafo, y el punto de entrada 
# que tendran.
input_data = {a:3.}

# Se ejecuta el grafo y se obtiene c, basado en el valor de entrada
# definido previamente en input_data.
resultado = sess.run(c,feed_dict=input_data)

print(resultado) # 6.0

Vectores y Matrices

a = tf.placeholder(tf.float32,shape=[2,2])
b = tf.placeholder(tf.int32,shape=[2,1])

# Convertimos los valores de int32 a float32.
# TF no acepta operaciones entre diferentes tipos de datos
b = tf.cast(b,tf.float32)

c = tf.matmul(a,b) # Producto interno
d = tf.multiply(a,b) # Multiplicación elemento por elemento. Broadcasting

sess = tf.Session()

input_data = {a:[[1,3],
                 [2,4]],
              b:[[5],
                 [6]]}

resultado1,resultado2 = sess.run([c,d],feed_dict=input_data)
# resultado1 = [[23.0],[34.0]]
# resultado2 = [[5.0,15.0],[12.0,24.0]]

Remoldear

a = tf.placeholder(tf.bool,shape=[None,3])
b = tf.reshape(a,shape=[-1])

sess = tf.Session()

input_data1 = {a:[[False,True,False]]}
input_data2 = {a:[[False,True,False],
                  [True,True,False]]}

resultado1 = sess.run(b,feed_dict=input_data1) # [False,True,False]
resultado2 = sess.run(b,feed_dict=input_data2) # [False,True,False,True,True,False]

Tensorboard