Estamos felices de anunciar que luz
La versión 0.3.0 ahora está en CRAN. Esta versión trae algunas mejoras al buscador de tasas de aprendizaje aportadas por primera vez por Chris McMaster. Como no teníamos una publicación de lanzamiento 0.2.0, también destacaremos algunas mejoras que se remontan a esa versión.
Qué luz
?
ya que es paquete relativamente nuevocomenzamos esta publicación de weblog con un resumen rápido de cómo luz
obras. Si ya sabes lo que luz
Es decir, siéntete libre de pasar a la siguiente sección.
luz
es una API de alto nivel para torch
que tiene como objetivo encapsular el ciclo de entrenamiento en un conjunto de piezas de código reutilizables. Scale back el texto estándar necesario para entrenar un modelo con torch
evita los errores propensos
zero_grad()
– backward()
– step()
secuencia de llamadas y también simplifica el proceso de mover datos y modelos entre CPU y GPU.
Con luz
puedes tomar tu torch
nn_module()
por ejemplo el perceptrón de dos capas definido a continuación:
modnn <- nn_module(
initialize = operate(input_size) {
self$hidden <- nn_linear(input_size, 50)
self$activation <- nn_relu()
self$dropout <- nn_dropout(0.4)
self$output <- nn_linear(50, 1)
},
ahead = operate(x) {
x %>%
self$hidden() %>%
self$activation() %>%
self$dropout() %>%
self$output()
}
)
y ajustarlo a un conjunto de datos específico de esta manera:
luz
entrenará automáticamente su modelo en la GPU si está disponible, mostrará una bonita barra de progreso durante el entrenamiento y manejará el registro de métricas, todo mientras se asegura de que la evaluación de los datos de validación se realice de la manera correcta (por ejemplo, deshabilitando el abandono).
luz
se puede ampliar en muchas capas diferentes de abstracción, por lo que puede mejorar su conocimiento gradualmente, a medida que necesite funciones más avanzadas en su proyecto. Por ejemplo, puedes implementar métricas personalizadas,
devoluciones de llamadao incluso personalizar el bucle de entrenamiento interno.
Para aprender sobre luz
lee el empezando
sección del sitio internet y discover la galería de ejemplos.
¿Qué hay de nuevo en luz
?
Buscador de tasa de aprendizaje
En el aprendizaje profundo, encontrar una buena tasa de aprendizaje es esencial para poder ajustarse a su modelo. Si es demasiado bajo, necesitarás demasiadas iteraciones para que tu pérdida converja, y eso podría resultar poco práctico si tu modelo tarda demasiado en ejecutarse. Si es demasiado alto, la pérdida puede explotar y es posible que nunca puedas llegar al mínimo.
El lr_finder()
La función implementa el algoritmo detallado en Tasas de aprendizaje cíclico para el entrenamiento de redes neuronales
(Herrero 2015) popularizado en el marco FastAI (Howard y Gugger 2020). se necesita un nn_module()
y algunos datos para producir un marco de datos con las pérdidas y la tasa de aprendizaje en cada paso.
mannequin <- internet %>% setup(
loss = torch::nn_cross_entropy_loss(),
optimizer = torch::optim_adam
)
data <- lr_finder(
object = mannequin,
knowledge = train_ds,
verbose = FALSE,
dataloader_options = listing(batch_size = 32),
start_lr = 1e-6, # the smallest worth that might be tried
end_lr = 1 # the most important worth to be experimented with
)
str(data)
#> Lessons 'lr_records' and 'knowledge.body': 100 obs. of 2 variables:
#> $ lr : num 1.15e-06 1.32e-06 1.51e-06 1.74e-06 2.00e-06 ...
#> $ loss: num 2.31 2.3 2.29 2.3 2.31 ...
Puede utilizar el método de trazado integrado para mostrar los resultados exactos, junto con un valor de pérdida suavizado exponencialmente.

Si desea aprender a interpretar los resultados de este gráfico y conocer más sobre la metodología, lea el artículo del buscador de tasas de aprendizaje en el
luz
sitio internet.
Manejo de datos
En la primera versión de luz
el único tipo de objeto que se permitía utilizar como datos de entrada para match
period un torch
dataloader()
. A partir de la versión 0.2.0, luz
También admite matrices/matrices R (o listas anidadas de ellas) como datos de entrada, así como torch
dataset()
s.
Admite abstracciones de bajo nivel como dataloader()
Como los datos de entrada son importantes, ya que con ellos el usuario tiene management complete sobre cómo se cargan los datos de entrada. Por ejemplo, puede crear cargadores de datos paralelos, cambiar cómo se realiza la mezcla y más. Sin embargo, tener que definir manualmente el cargador de datos parece innecesariamente tedioso cuando no es necesario personalizar nada de esto.
Otra pequeña mejora con respecto a la versión 0.2.0, inspirada en Keras, es que puedes pasar un valor entre 0 y 1 a match
‘s valid_data
parámetro, y luz
Tomará una muestra aleatoria de esa proporción del conjunto de entrenamiento, que se utilizará para los datos de validación.
Lea más sobre esto en la documentación del
match()
función.
Nuevas devoluciones de llamada
En versiones recientes, se agregaron nuevas devoluciones de llamada integradas a luz
:
luz_callback_gradient_clip()
: Ayuda a evitar la divergencia de pérdidas al recortar gradientes grandes.luz_callback_keep_best_model()
: Cada época, si hay una mejora en la métrica monitoreada, serializamos los pesos del modelo en un archivo temporal. Cuando finaliza el entrenamiento, recargamos pesas del mejor modelo.luz_callback_mixup()
: Implementación de ‘Confusión: más allá de la minimización empírica del riesgo’
(Zhang et al. 2017). Mixup es una buena técnica de aumento de datos que ayuda a mejorar la coherencia del modelo y el rendimiento normal.
Puedes ver el registro de cambios completo disponible
aquí.
En este put up también queremos agradecer a:
-
@jonthegeek para mejoras valiosas en el
luz
guías de introducción. -
@mattwarkentin para muchas buenas concepts, mejoras y correcciones de errores.
-
@cmcmaster1 para la implementación inicial del buscador de tasa de aprendizaje y otras correcciones de errores.
-
@skeydan para la implementación del callback Mixup y mejoras en el buscador de tasas de aprendizaje.
¡Gracias!
Foto por dil en desempaquetar
Howard, Jeremy y Sylvain Gugger. 2020. “Fastai: una API en capas para el aprendizaje profundo”. Información 11 (2): 108. https://doi.org/10.3390/info11020108.
Smith, Leslie N. 2015. “Tasas de aprendizaje cíclico para el entrenamiento de redes neuronales”. https://doi.org/10.48550/ARXIV.1506.01186.
Zhang, Hongyi, Moustapha Cisse, Yann N. Dauphin y David López-Paz. 2017. “Confusión: más allá de la minimización del riesgo empírico”. https://doi.org/10.48550/ARXIV.1710.09412.