Introducción:
El jacobiano es un operador muy poderoso que se usa para calcular las derivadas parciales de una función dada con respecto a sus variables latentes constituyentes. Para fines de actualización, el jacobiano de una función dada con respecto a un vector se define como
Ejemplo:
Supongamos que tenemos un vector y una función . Para calcular el jacobiano de con respecto a , podemos usar la fórmula mencionada anteriormente para obtener
Para lograr la misma funcionalidad que la anterior, podemos usar la función jacobian() de la utilidad torch.autograd.function de Pytorch para calcular la array jacobiana de una función dada para algunas entradas.
Sintaxis: torch.autograd.function.jacobian(func, inputs, create_graph=False, strict=False, vectorize=False)
Parámetros:
- func: una función de Python que toma entrada y genera un tensor de Pytorch (o una tupla de tensores).
- entradas: Las entradas se pasan como parámetros al método ‘func’. La entrada puede ser un solo tensor Pytorch (o una tupla de tensores)
- create_graph: si es True, el motor de autogradación crea un gráfico compatible con versiones anteriores para realizar más operaciones en los degradados. El valor predeterminado es falso.
- estricto: si es verdadero, se generará un error cuando el motor detecte que existe una entrada tal que todas las salidas son independientes de ella. Si es False, devuelve cero gradientes para dichas entradas. El valor predeterminado es falso.
- vectorizar: Todavía en su fase experimental si es Verdadero, la función usa la función de prototipo vmap para calcular los gradientes con solo una llamada del motor de autogradación en lugar de una llamada por cada fila de la array. El valor predeterminado es falso.
Instalación:
Para este artículo, solo necesita la utilidad torch, que se puede descargar a través del administrador de paquetes pip usando:
pip install torch
Ejemplo de uso de la función:
Usaremos la misma función y vector para facilitar el flujo, como se discutió en el ejemplo anterior. Dado que los tensores son los componentes básicos del paquete Pytorch, los usaremos para representar tanto los vectores de entrada como la función dada. Este artículo asume una familiaridad básica con los tensores de Pytorch que se pueden revisar rápidamente revisando los artículos de Pytorch .
Verificación teórica:
Supongamos que tenemos un vector como entrada dada. Introduciendo los valores de en la ecuación derivada anterior obtendremos
Código: implementación de Python para mostrar el funcionamiento de Jacobian Matrix usando Pytorch
Python
from torch.autograd.functional import jacobian from torch import tensor #Defining the main function def f(x1,x2,x3): return (x1 + x2, x3*x1, x2**3) #Defining input tensors x1 = tensor(3.0) x2 = tensor(4.0) x3 = tensor(5.0) #Printing the Jacobian print(jacobian(f,(x1,x2,x3)))
Producción:
((tensor(1.), tensor(1.), tensor(0.)), (tensor(5.), tensor(0.), tensor(3.)), (tensor(0.), tensor(48.), tensor(0.)))
¡El resultado es exactamente similar a nuestra verificación teórica! Usando un enfoque similar, podemos calcular la array jacobiana de cualquier función dada usando la API de Pytorch.
Referencias:
- https://pytorch.org/docs/stable/autograd.html#torch.autograd.funcional.jacobian
- https://pytorch.org/docs/stable/tensors.html
Publicación traducida automáticamente
Artículo escrito por adityasaini70 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA