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.
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.
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()
.
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.
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.
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