Introducción a Theano en Python

Introducción a Theano en Python

Theano es una biblioteca de Python que permite definir expresiones matemáticas y optimizarlas para su evaluación en CPUs o GPUs. Es una herramienta poderosa para el aprendizaje automático, ya que permite escribir código eficiente para redes neuronales y otros algoritmos complejos.

En este tutorial, aprenderemos los conceptos básicos de Theano y veremos cómo usarlo para escribir programas simples.

Instalación

Para instalar Theano en Python, podemos usar el administrador de paquetes de Python o descargar el código fuente y compilarlo nosotros mismos.

pip install theano

Importando Theano

Para empezar a usar Theano, debemos importarlo en nuestro código.

Python
import theano

Variables simbólicas

En Theano, todas las variables son simbólicas. Esto significa que no tienen un valor concreto, sino que representan una expresión matemática.

Python
x = theano.tensor.dscalar("x")
y = theano.tensor.dscalar("y")

z = x + y

En este ejemplo, creamos dos variables simbólicas, x e y, y una expresión, z, que es la suma de x e y.

Evaluación de expresiones

Para evaluar una expresión simbólica, podemos usar la función eval().

Python
x = 1
y = 2

z = theano.tensor.dscalar("z")

z.eval({x: 1, y: 2})

En este ejemplo, asignamos a x y y valores concretos, y luego evaluamos z. El resultado es 3.

Optimización de expresiones

Theano puede optimizar expresiones para que se ejecuten de forma más eficiente. Podemos usar la función function() para crear una función que represente la expresión optimizada.

Python
x = theano.tensor.dscalar("x")
y = theano.tensor.dscalar("y")

z = theano.tensor.dscalar("z")

z = x + y

f = theano.function([x, y], z)

z = f(1, 2)

En este ejemplo, creamos una función f que representa la expresión x + y optimizada. El resultado es 3.

Ejemplo: una red neuronal simple

Aquí hay un ejemplo de cómo usar Theano para implementar una red neuronal simple.

Python
import theano
import theano.tensor as T

class Network(object):

    def __init__(self):
        self.w1 = theano.shared(np.random.randn(2, 3).astype(theano.config.floatX))
        self.w2 = theano.shared(np.random.randn(3, 1).astype(theano.config.floatX))
        self.b1 = theano.shared(np.zeros(3).astype(theano.config.floatX))
        self.b2 = theano.shared(np.zeros(1).astype(theano.config.floatX))

    def forward(self, x):
        z1 = T.dot(x, self.w1) + self.b1
        a1 = T.tanh(z1)
        z2 = T.dot(a1, self.w2) + self.b2
        return z2

net = Network()

x = T.matrix('x')
y = net.forward(x)

f = theano.function([x], y)

x_data = np.array([[1, 2], [3, 4]])
y_data = np.array([[5], [7]])

for x_i, y_i in zip(x_data, y_data):
    y_pred = f(x_i)
    print(y_pred)

En este ejemplo, creamos una red neuronal con dos capas ocultas de tres neuronas cada una. La función forward() implementa el cálculo de la red neuronal. La función f() crea una función que representa la red neuronal optimizada.

Para entrenar la red neuronal, podemos usar un algoritmo de aprendizaje automático como gradiente descendente.

Conclusión

Theano es una herramienta poderosa para el aprendizaje automático. Permite escribir código eficiente para redes neuronales y otros algoritmos complejos.

En este tutorial, hemos