¿Cuál es el significado y el beneficio de las variables compartidas en Theano?

Variables teano y simbólicas

Para explicar las variables compartidas, primero debe comprender que Theano realiza cálculos a través de expresiones simbólicas. Esto significa que las variables en el cálculo no reciben ningún valor de inmediato. Por ejemplo el siguiente código:

x = theano.tensor.matrix (‘x’)
y = theano.tensor.matrix (‘y’)
z = x + y
f = theano.function (entradas = [x, y], salidas = [z])
salida = f ([[1, 2, 3]], [[4, 5, 6]])

En este código, x, y y z no reciben ningún valor tras la declaración. En la cuarta línea, theano compila la expresión z = x + y en una función f. Cuando se llama f con los valores de x e y en la línea final, solo entonces se asignan los valores relevantes. La variable de salida debe contener [[5, 7, 9]].

Variables simbólicas con valores predefinidos

Asignar valores a las variables siempre que lo desee es genial, pero ¿qué sucede si desea agregar x a una matriz predefinida que siempre tiene los mismos valores? Podemos modificar el código:

x = theano.tensor.matrix (‘x’)
y = theano.tensor.shared (numpy.array ([[4, 5, 6]]))
z = x + y
f = theano.function (entradas = [x], salidas = [z])
salida = f ([[1, 2, 3]])

Observe que el valor de y no se pasa a f en la línea final, esto se debe a que ya se le ha dado un valor a través del constructor compartido.

Los principales beneficios del uso de constructores compartidos son que puede usarlos para inicializar variables importantes con valores numéricos predefinidos (matrices de peso en una red neuronal, por ejemplo).

Si la construcción se realiza correctamente, theano envía automáticamente las matrices grandes a la memoria de la GPU para un cálculo más rápido.