TensorFlow vs PyTorch 4: diferenciación automática
Cuando se utiliza el método de retropropagación para entrenar una red neuronal, los parámetros del modelo se ajustan en función del gradiente de la función de pérdida y los parámetros correspondientes, es decir:
Automático La diferenciación es una herramienta imprescindible para los kits de herramientas de aprendizaje automático. Puede calcular automáticamente el diferencial de todo el gráfico computacional.
PyTorch tiene un motor de diferenciación automática incorporado llamado torch.autograd. Los tipos de datos admitidos por este motor son: tipo tensor de punto flotante (half, float, double y bfloat16) y tipo tensor complejo (cfloat). , cdouble )
Propiedades y funciones de Tensor de uso común relacionadas con la diferenciación automática en PyTorch:
TensorFlow rastrea y calcula automáticamente la diferenciación a través de la API tf.GradientTape, GradientTape, traducida como cinta diferencial, Cinta Tiene una sensación un poco histórica de máquina de cinta, es decir, registra todos los cálculos y los resultados de los cálculos en una cinta.
tf.GradientTape se calcula en tf.Variable en lugar de tf.Tensor, porque en TensorFlow, tf.Tensor es un objeto inmutable y tf.Variable es un objeto mutable generalmente se usa para almacenamiento; parámetros del modelo.
tf.Variable tiene un atributo entrenable, que tf.Tensor no tiene. Es similar a require_grad de PyTorch Tensor, que le indica al motor de diferenciación automática si debe rastrear el tf.Variable y calcular automáticamente el diferencial de. la tf.Variable.
Ejemplo:
Como puede ver en lo anterior, la implementación de diferenciación automática de TensorFlow es muy diferente de PyTorch y no empaqueta los parámetros y el microenvoltorio de parámetros en uno. objeto, lo cual es muy importante. ¡No es fácil de usar o no está bien empaquetado!
Para facilitar la implementación del modelo, los parámetros del modelo y la diferenciación de los parámetros del modelo, TensorFlow proporciona otro conjunto de mecanismos: Diferenciación del modelo (Gradientes con respecto a un modelo) , lo que significa: el equipo de desarrollo de TensorFlow también sabe que tf.Variable se usa para implementar los parámetros del modelo, y luego el método tape.gradient() se usa para calcular el diferencial de tf.Variable y su diferencial correspondiente están separados y no encapsulados. Este método no es amigable para los desarrolladores, por lo que el equipo de desarrolladores de TensorFlow proporciona un atributo Module.trainable_variables para la clase básica para construir modelos: tf.Module o sus subclases (layers.Layer, keras.Model). Parámetros y se pueden utilizar más convenientes. Sin embargo, el diferencial correspondiente aún no está encapsulado e insistimos en nuestra propia personalidad... Para nosotros, los desarrolladores, todavía elegimos seguir...
Ejemplo:
Materiales de referencia :