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 tasa de aprendizaje aportado por primera vez por chris mcmaster. Como no teníamos una publicación de lanzamiento de 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éntase 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 repetitivo requerido para entrenar un modelo con torch
evita la tendencia a errores
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 = perform(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 = perform(x) {
x %>%
self$hidden() %>%
self$activation() %>%
self$dropout() %>%
self$output()
}
)
y ajústelo a un conjunto de datos específico así:
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 la deserción).
luz
puede extenderse en muchas capas diferentes de abstracción, por lo que puede mejorar su conocimiento gradualmente, a medida que necesita características más avanzadas en su proyecto. Por ejemplo, puede implementar métricas personalizadas,
devoluciones de llamadao incluso personalizar el bucle de entrenamiento interno.
Aprender sobre luz
leer el empezando
en la sección del sitio internet y navegue por 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 basic para poder ajustar su modelo. Si es demasiado bajo, necesitará demasiadas iteraciones para que su pérdida converja, y eso podría no ser práctico si su modelo tarda demasiado en ejecutarse. Si es demasiado alto, la pérdida puede explotar y es posible que nunca pueda llegar a un mínimo.
Él lr_finder()
La función implementa el algoritmo detallado en Tasas de aprendizaje cíclico para entrenar 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,
information = train_ds,
verbose = FALSE,
dataloader_options = listing(batch_size = 32),
start_lr = 1e-6, # the smallest worth that will likely be tried
end_lr = 1 # the most important worth to be experimented with
)
str(data)
#> Courses 'lr_records' and 'information.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 exponencialmente suavizado de la pérdida.

Si quieres aprender a interpretar los resultados de este gráfico y saber más sobre la metodología lee el artículo del buscador de tasa de aprendizaje sobre el
luz
sitio internet.
Manejo de datos
En el primer lanzamiento de luz
el único tipo de objeto que se permitió 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/arreglos R de R (o listas anidadas de ellos) como datos de entrada, así como torch
dataset()
s.
Admite abstracciones de bajo nivel como dataloader()
ya que 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 la forma en que 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, para usarla como datos de validación.
Lea más sobre esto en la documentación de la
match()
función.
Nuevas devoluciones de llamada
En versiones recientes, se agregaron nuevas devoluciones de llamadas integradas a luz
:
luz_callback_gradient_clip()
: ayuda a evitar la divergencia de pérdida al recortar grandes gradientes.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 pesos 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 consistencia del modelo y el rendimiento basic.
Puede ver el registro de cambios completo disponible
aquí.
En este submit también queremos agradecer a:
-
@jonthegeek por valiosas mejoras en el
luz
guías de inicio. -
@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 de la devolución de llamada de Mixup y mejoras en el buscador de tasa de aprendizaje.
¡Gracias!
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 entrenar redes neuronales”. https://doi.org/10.48550/ARXIV.1506.01186.
Zhang, Hongyi, Moustapha Cisse, Yann N. Dauphin y David López-Paz. 2017. “Mezcla: más allá de la minimización empírica del riesgo”. https://doi.org/10.48550/ARXIV.1710.09412.