timm documentation

HParams

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

HParams

A lo largo de los años, muchos modelos de timm se han entrenado con diversos hiperparámetros a medida que las librerías y los modelos evolucionaban. No tengo un registro de cada instancia, pero he documentado muchas que pueden servir como un muy buen punto de partida.

Comience con los gists de archivos de configuración para las ejecuciones registradas, o con las recetas seleccionadas a continuación para configuraciones que puede copiar en un archivo YAML. Los ejemplos de scripts de entrenamiento muestran sus equivalentes en línea de comandos.

Etiquetas

La mayoría de los modelos entrenados con timm tienen un identificador en su etiqueta de preentrenamiento que los relaciona (aproximadamente) con una familia o versión de hiperparámetros que he utilizado a lo largo de los años.

La familia de recetas es una pista, no una configuración completa. Al elegir una configuración, asegúrese de que coincidan el nombre completo del checkpoint, el conjunto de datos de entrenamiento y la resolución. Por ejemplo, vit_medium_patch16_reg4_gap_256.sbb_in1k se entrenó en ImageNet-1k, mientras que .sbb_in12k_ft_in1k identifica un preentrenamiento en ImageNet-12k seguido de un ajuste fino en ImageNet-1k. Algunas etiquetas codifican un calendario y una resolución en lugar de un nombre de familia: la etiqueta e500_r256_in1k de MobileNetV4 pertenece a la familia ra4 aunque ra4 no aparezca en la etiqueta.

Etiqueta(s)DescripciónOptimizadorPrograma de LROtras notas
a1hBasado en la receta A1 de ResNet Strikes BackLAMBCoseno con calentamientoDropout más fuerte, profundidad estocástica y RandAugment que la receta del artículo A1
ahBasado en la receta A1 de ResNet Strikes BackLAMBCoseno con calentamientoSin CutMix. Dropout, profundidad estocástica y RandAugment más intensos que la receta del artículo A1
a1, a2, a3ResNet contraataca A{1,2,3} recetaLAMB con pérdida BCECoseno con calentamiento—
b1, b2, b1k, b2kBasado en la receta B de ResNet Strikes Back (equivalente a las recetas RA2 de timm)RMSProp (comportamiento de TF 1.0)Paso (decaimiento exponencial con escalera) con calentamiento—
c, c1, c2, c3Basado en las recetas C de ResNet Strikes BackSGD (Nesterov) con AGCCoseno con calentamiento—
chBasado en las recetas C de ResNet Strikes BackSGD (Nesterov) con AGCCoseno con calentamientoDropout más fuerte, profundidad estocástica y RandAugment que las recetas C1/C2 del artículo
d, d1, d2Basado en la receta D de ResNet Strikes BackAdamW con pérdida BCECoseno con calentamiento—
swRecetas de entrenamiento/preentrenamiento estilo DeiT / Swin, también utilizadas para ConvNeXt y modelos híbridosAdamW, a menudo con recorte de gradienteCoseno con calentamientoEMA varía según la ejecución
sbbBuscando mejores líneas base de ViTAdamW o NAdamWCoseno con calentamientoAumento repetido; decaimiento de capas para el ajuste fino
ra, ra2, ra3, racm, raaRecetas de RandAugment. Inspiradas en las recetas de RandAugment de EfficientNet. Cubiertas por la receta B en ResNet Strikes Back.RMSProp (comportamiento de TF 1.0), EMAPaso (decaimiento exponencial con escalera) con calentamiento—
ra4RandAugment v4. Inspirado en los hiperparámetros de MobileNetV4.AdamW o NAdamW, EMACoseno con calentamientoIncluye recetas de ResNet con programación larga; los betas del optimizador varían según el modelo
amReceta de AugMixSGD (Nesterov) con pérdida JSDCoseno con calentamiento—
ramReceta de AugMix (con RandAugment)SGD (Nesterov) con pérdida JSDCoseno con calentamiento—
btReceta Bag-of-TricksSGD (Nesterov)Coseno con calentamiento—

Gists de archivos de configuración

Estas colecciones contienen las configuraciones YAML grabadas, incluidos los ajustes específicos de las máquinas originales y de la versión del script de entrenamiento. Abra un gist, elija el archivo YAML de un modelo y use Raw para guardarlo localmente.

Colección de gistsFamilia de recetasContenido y configuración original
MobileNetV4 y ResNets con programación largara4Ejecuciones de Conv y MobileNetV4 híbridos; las cantidades de GPU están en los nombres de archivo. También incluye configuraciones de ResNet de 3600 épocas.
Buscando mejores líneas base de ViTsbbEntrenamiento en ImageNet-1k, preentrenamiento en ImageNet-12k y ajuste fino; 2 o 4 GPUs, tal como se indica en cada archivo.
Entrenamiento y ajuste fino de ConvNeXtRecetas de ConvNeXtEntrenamiento de Atto/Nano en 4 GPUs; ajuste fino de Tiny/Small de ImageNet-12k a ImageNet-1k en 8 GPUs.
ViT, ConvNeXt, CoAtNet y MaxViTEstilo DeiT / SwinConfiguraciones de entrenamiento y ajuste fino mixtos; 4–8 dispositivos GPU o TPU. Muchos usan TFDS.
ResNet-D y ECA-ResNet RA2ra2ResNet-18D/34D/50D y ECA-ResNet-26D; 2 GPUs, tasas de aprendizaje explícitas.
RegNet y RegNetZra3, SGD + AGC8 núcleos TPU. Algunos archivos son plantillas con model: xxx; el README señala una discrepancia entre la receta y el checkpoint para RegNetY-064.
NFNet con recorte adaptativo de gradientesSGD + AGCConfiguración histórica de ECA-NFNet-L1 en nfnet.yaml; usa Apex fusedsgd.
Modelos MLP en TPUAdamWEjecuciones históricas de gMLP, gMixer y ResMLP vinculadas a la rama experimental bits_and_tpu.
Modelos de prueba pequeñosDerivado de MobileNetV4ViTs y ConvNeXts de prueba pequeños con programas de 1600 a 1800 épocas.

Adaptar una configuración grabada

Pasa un archivo local con --config hparams.yaml; los argumentos de línea de comandos sobrescriben sus valores. Consulta archivos de configuración para más detalles.

  • Establezca --data-dir para su máquina. Para un conjunto de datos ImageFolder, también sobrescriba un conjunto de datos TFDS guardado con --dataset imagefolder/. El entrenamiento espera subcarpetas de clases bajo train/ y validation/ (o elija el directorio de validación con --val-split).
  • Comprueba model, pretrained, num_classes y las rutas de cualquier checkpoint. Una configuración de fine-tuning necesita su checkpoint preentrenado original; un nombre de arquitectura por sí solo puede seleccionar pesos predeterminados diferentes hoy en día.
  • Los archivos antiguos pueden contener opciones eliminadas, como apex_amp, native_amp, amp_impl o force_cpu. El train.py actual emite una advertencia sobre las claves desconocidas. Las configuraciones en línea a continuación utilizan opciones actuales. Los nombres de optimizador antiguos fusedadamw / fusedsgd se refieren a implementaciones de Apex; cambiar a adamw / sgd es una adaptación de esa ejecución.

Para el entrenamiento de tamaño fijo, el tamaño de lote global efectivo es:

batch_size × number of training processes × grad_accum_steps

batch_size es por proceso (normalmente una GPU). Un lr no nulo se usa directamente y no se reescala automáticamente. Con lr sin establecer (null en YAML), lr_base se escala en relación con lr_base_size. Establece lr_base_scale: sqrt para las recetas de AdamW/NAdamW a continuación; el escalado lineal se usa comúnmente para SGD/RMSProp. Los grandes cambios en el tamaño del lote aún requieren ajuste. La acumulación de gradientes preserva el tamaño efectivo del lote, pero no aumenta el lote visto por BatchNorm.

Para los programas de coseno, warmup_prefix: true añade un período de calentamiento antes del programa de epochs; cooldown_epochs añade un período final en la LR mínima. Mantén estas configuraciones al adaptar una ejecución anterior.

Recetas seleccionadas

Estos ejemplos conservan la configuración de entrenamiento de archivos gist específicos y omiten rutas de máquina y opciones no utilizadas. Las etiquetas del modelo fijan la configuración de preprocesamiento; los pesos se cargan solo cuando pretrained: true. Las precisiones de referencia a continuación son evaluaciones de los puntos de control publicados en results-imagenet.csv, no mediciones obtenidas de la reejecución de estos ejemplos. La resolución y el recorte de validación son importantes al comparar resultados.

Punto de control publicadoEntrenamientoTamaño / recorte de evaluaciónImageNet-1k top-1
mobilenetv4_conv_medium.e500_r256_in1kImageNet-1k, 256px256 / 0.95; 320 / 1.079.916%; 80.890%
vit_medium_patch16_reg4_gap_256.sbb_in1kImageNet-1k, 256px256 / 0.9583.466%
convnext_tiny.in12k_ft_in1kImageNet-12k → ImageNet-1k, 224px224 / 0.95; 288 / 1.084.192%; 84.448%

MobileNetV4 Conv Medium

mnv4_cm_r256_e500_gpu2.yaml. La ejecución original utilizó 2 GPUs × 512 imágenes = 1024 de lote global, con una LR fija de 0.002. El programa consiste en 20 épocas de calentamiento seguidas de 500 épocas coseno (520 en total). Guárdalo como mobilenetv4.yaml:

model: mobilenetv4_conv_medium.e500_r256_in1k
pretrained: false
img_size: 256
crop_pct: 0.95
batch_size: 512
opt: adamw
lr: 0.002
weight_decay: 0.1
clip_grad: 5.0
sched: cosine
sched_on_updates: true
epochs: 500
warmup_epochs: 20
warmup_prefix: true
warmup_lr: 0.0
min_lr: 0.0
cooldown_epochs: 0
aa: rand-m8-inc1-mstd1.0
mixup: 0.2
mixup_prob: 0.8
smoothing: 0.1
reprob: 0.25
remode: pixel
drop: 0.2
drop_path: 0.1
model_ema: true
model_ema_decay: 0.9998
model_ema_warmup: true
dist_bn: reduce
amp: true
amp_dtype: bfloat16
torchcompile: inductor

Este ejemplo usa AMP con bfloat16, como en la ejecución original; use --amp-dtype float16 en GPUs sin soporte para bfloat16. torchcompile puede omitirse si no se desea la compilación.

ViT Medium con registros

Fuente: train-vit_medium_reg4-4gpu-in1k.yaml, también disponible como train_hparams.yaml del checkpoint. Esta ejecución de SBB utilizó 4 GPUs × 256 imágenes = 1024 de lote global. La escalación por raíz cuadrada da 0.0008 × sqrt(1024 / 512) ≈ 0.001131. Sus 600 épocas incluyen warmup, con 10 épocas de cooldown añadidas. Guárdalo como vit-medium.yaml:

model: vit_medium_patch16_reg4_gap_256.sbb_in1k
pretrained: false
model_kwargs:
  fix_init: true
head_init_scale: 0.0
img_size: 256
crop_pct: 0.95
batch_size: 256
opt: adamw
opt_eps: 1.0e-8
lr: null
lr_base: 0.0008
lr_base_size: 512
lr_base_scale: sqrt
weight_decay: 0.07
clip_grad: 5.0
sched: cosine
sched_on_updates: true
epochs: 600
warmup_epochs: 20
warmup_prefix: false
warmup_lr: 5.0e-7
min_lr: 5.0e-7
cooldown_epochs: 10
aa: rand-m7-inc1-mstd1.0-n3
aug_repeats: 3
color_jitter: 0.0
mixup: 0.8
cutmix: 1.0
smoothing: 0.1
reprob: 0.2
remode: pixel
drop_path: 0.2
model_ema: false
seed: 0
amp: true
amp_dtype: float16
torchcompile: inductor

La configuración de inicialización (fix_init y un clasificador inicializado a cero) forma parte de esta receta. Esta ejecución en particular utilizó AdamW y no EMA; otros archivos SBB utilizan NAdamW o diferentes configuraciones de preentrenamiento.

Ajuste fino de ConvNeXt Tiny

Fuente: hparams_84_00-convnext_tiny.in12k-args.yaml. Comience desde convnext_tiny.in12k, reemplace su clasificador con 1000 clases y ajuste fino en ImageNet-1k. La ejecución original utilizó 8 GPUs × 512 imágenes = 4096 lote global y una LR fija de 0.0001. Tiene 75 épocas incluyendo warmup, más 10 épocas de cooldown. La fuente evalúa con un crop de 1.0; los resultados de benchmark del checkpoint anteriores utilizan los crops de evaluación indicados. Guarde como convnext-tiny-ft.yaml:

model: convnext_tiny.in12k
pretrained: true
num_classes: 1000
img_size: 224
crop_pct: 1.0
batch_size: 512
grad_checkpointing: true
opt: adamw
lr: 0.0001
weight_decay: 0.05
layer_decay: 0.75
clip_grad: 3.0
sched: cosine
sched_on_updates: false
epochs: 75
warmup_epochs: 10
warmup_prefix: false
warmup_lr: 1.0e-6
min_lr: 5.0e-7
cooldown_epochs: 10
lr_noise: [0.1, 1.0]
aa: rand-m8-inc1-mstd101
mixup: 0.8
cutmix: 1.0
smoothing: 0.1
reprob: 0.3
remode: pixel
drop_path: 0.1
model_ema: true
model_ema_decay: 0.9998
amp: true
amp_dtype: float16

Por ejemplo, inicie la configuración de MobileNetV4 guardada con:

torchrun --standalone --nproc_per_node=2 train.py \
  --config mobilenetv4.yaml --data-dir /data/imagenet --experiment mobilenetv4-cm

Use 4 procesos para vit-medium.yaml o 8 para convnext-tiny-ft.yaml para coincidir con los tamaños de lote globales originales, o ajuste el tamaño de lote, la acumulación y la LR para su hardware.

Update on GitHub