Trening, validering og forebygging av overtilpasning
Overvåk val_loss, bruk Dropout og benytt tilbakekallingsfunksjoner for tidlig stopp.
Trening, validering og forebygging av overtilpasning er en gratis leksjon i R Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i R Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i R Academy inneholder totalt 4 leksjoner.
Inndeling i trening, validering og test
Dyp læring krever tre datadeler: trening (modellen lærer parametere), validering (overvåker generalisering under treningen og brukes til å justere hyperparametere) og test (endelig, objektiv evaluering). Argumentet validation_split i fit() oppretter valideringssettet automatisk.
# validation_split = 0.2 reserves last 20% as validation
history <- model |> fit(
x_train, y_train,
epochs = 50,
batch_size = 32,
validation_split = 0.2,
verbose = 0
)
# history contains train and val metrics per epoch
names(history$metrics)Objektet for treningshistorikk
Objektet som returneres av fit(), inneholder en $metrics-liste med ett element per logget metrikk per epoke. Kall plot(history) for å visualisere trenings- og valideringskurver side om side. Kurver som utvikler seg forskjellig (trening forbedres, mens validering flater ut), er et tegn på overtilpasning.
# Training loss and accuracy over epochs
head(history$metrics$loss)
head(history$metrics$val_loss)
# Plot training curves
plot(history)
# Or create a custom ggplot
library(ggplot2)
df <- data.frame(
epoch = seq_along(history$metrics$loss),
train = history$metrics$loss,
val = history$metrics$val_loss
)
ggplot(df, aes(epoch)) +
geom_line(aes(y = train, colour = 'Train')) +
geom_line(aes(y = val, colour = 'Validation')) +
labs(y = 'Loss', title = 'Training Curves')Oppdage overtilpasning
Overtilpasning oppstår når treningstapet fortsetter å synke, mens valideringstapet begynner å øke. Modellen memoriserer treningsdataene i stedet for å lære generaliserbare mønstre. Tegn på dette er et stort gap mellom nøyaktigheten for trening og validering, samt at valideringstapet har et tydelig minimum før det øker igjen.
# Overfitting is visible in the history
# Example of overfitting signatures:
cat('Epoch 5 — Train loss: 0.12, Val loss: 0.18\n')
cat('Epoch 10 — Train loss: 0.06, Val loss: 0.21\n')
cat('Epoch 20 — Train loss: 0.02, Val loss: 0.31\n')
# The model should have stopped at epoch 5!
# Strategies: early stopping, dropout, regularisation, more datacallback_early_stopping()
callback_early_stopping(monitor, patience, restore_best_weights) stanser treningen når metrikken som overvåkes, slutter å forbedres. patience er antallet epoker De venter etter den siste forbedringen. Sett restore_best_weights = TRUE for automatisk å gå tilbake til vektene fra den beste epoken.
early_stop <- callback_early_stopping(
monitor = 'val_loss',
patience = 10, # wait 10 epochs
restore_best_weights = TRUE # rollback to best
)
history <- model |> fit(
x_train, y_train,
epochs = 200,
batch_size = 32,
validation_split = 0.2,
callbacks = list(early_stop),
verbose = 0
)
cat('Stopped at epoch:', length(history$metrics$loss))callback_reduce_lr_on_plateau()
Når treningen stopper opp, kan en redusert læringsrate ofte sette fremgangen i gang igjen. callback_reduce_lr_on_plateau(monitor, factor, patience) multipliserer den gjeldende læringsraten med factor når metrikken som overvåkes, ikke har blitt bedre på patience epoker.
reduce_lr <- callback_reduce_lr_on_plateau(
monitor = 'val_loss',
factor = 0.5, # halve the learning rate
patience = 5, # after 5 stagnant epochs
min_lr = 1e-6 # floor for learning rate
)
history <- model |> fit(
x_train, y_train,
epochs = 100,
batch_size = 64,
validation_split = 0.2,
callbacks = list(early_stop, reduce_lr),
verbose = 1
)callback_model_checkpoint()
callback_model_checkpoint(filepath, save_best_only) lagrer modellvektene på disken ved slutten av hver epoke (eller bare når ytelsen forbedres med save_best_only = TRUE). Dette beskytter mot treningskrasj og lar Dem laste inn den beste modellen selv om treningen fortsetter forbi det optimale punktet.
checkpoint <- callback_model_checkpoint(
filepath = '/tmp/best_model.h5',
monitor = 'val_accuracy',
save_best_only = TRUE,
mode = 'max', # higher accuracy = better
verbose = 1
)
history <- model |> fit(
x_train, y_train,
epochs = 100,
batch_size = 32,
validation_split = 0.2,
callbacks = list(early_stop, reduce_lr, checkpoint)
)
# Reload best model
best_model <- load_model_hdf5('/tmp/best_model.h5')validation_data kontra validation_split
validation_split tar de siste N prosentene av treningsdataene. Hvis dataene er sortert (for eksempel tidsserier), blir dette skjevt. Bruk i stedet validation_data = list(x_val, y_val) for å angi et ferdig laget valideringssett fra en tilfeldig, stratifisert inndeling.
# Manually create a random validation split
set.seed(42)
val_idx <- sample(nrow(x_train), size = 0.2 * nrow(x_train))
x_val <- x_train[val_idx, ]
y_val <- y_train[val_idx, ]
x_tr <- x_train[-val_idx, ]
y_tr <- y_train[-val_idx, ]
history <- model |> fit(
x_tr, y_tr,
epochs = 50,
batch_size = 32,
validation_data = list(x_val, y_val), # explicit val set
callbacks = list(early_stop)
)Effekten av batchstørrelsen
Batchstørrelsen er en viktig hyperparameter under treningen. Mindre batcher tilfører mer støy i gradientestimatene (og fungerer som regularisering), noe som kan bidra til bedre generalisering. Større batcher er raskere, men kan konvergere til skarpere minima som generaliserer dårligere. Typiske verdier er 32, 64 og 128. Prøv 32 først.
# Compare training with different batch sizes
for (bs in c(32, 128, 512)) {
set_weights(model, init_weights) # reset
h <- model |> fit(
x_train, y_train,
epochs = 20,
batch_size = bs,
validation_split = 0.2,
verbose = 0
)
cat('Batch:', bs, '| Val Acc:',
tail(h$metrics$val_accuracy, 1), '\n')
}Oppvarming av læringsraten
Å starte med en svært liten læringsrate og gradvis øke den gjennom de første epokene (oppvarming) kan stabilisere treningen, særlig for store modeller eller små datasett. En egendefinert LearningRateScheduler-tilbakekalling gjør dette mulig.
# Custom learning rate schedule with warmup
lr_schedule <- function(epoch, lr) {
if (epoch < 5) {
return(lr * (epoch + 1) / 5) # warmup
} else if (epoch < 30) {
return(lr) # constant
} else {
return(lr * 0.95) # decay
}
}
lr_callback <- callback_learning_rate_scheduler(lr_schedule)
history <- model |> fit(
x_train, y_train,
epochs = 50,
callbacks = list(lr_callback, early_stop),
validation_split = 0.2
)Oppsummering av regularisering
Flere regulariseringsteknikker bør kombineres for robust dyp læring:
- Dropout: setter tilfeldige nevroner til null under treningen.
- Weight decay (L2): straffer store vekter i tapsfunksjonen.
- Early stopping: stopper før modellen blir overtilpasset.
- Dataaugmentering: øker treningssettets størrelse kunstig.
- Batchnormalisering: stabiliserer aktiveringene og reduserer kovariatforskyvning.
model <- keras_model_sequential(input_shape = c(784)) |>
layer_dense(512, use_bias = FALSE,
kernel_regularizer = regularizer_l2(1e-4)) |>
layer_batch_normalization() |>
layer_activation('relu') |>
layer_dropout(0.4) |>
layer_dense(256, kernel_regularizer = regularizer_l2(1e-4)) |>
layer_batch_normalization() |>
layer_activation('relu') |>
layer_dropout(0.3) |>
layer_dense(10, activation = 'softmax')
model |> compile('adam', 'categorical_crossentropy', 'accuracy')Plotting av treningskurver
Visualiser alltid trenings- og valideringsmetrikkene side om side. En godt trent modell bør vise at begge kurvene konvergerer og holder seg nær hverandre. Hvis de spriker, kan De legge til regularisering eller redusere modellens kapasitet. Hvis begge kurvene flater ut ved et høyt tap, er modellen undertrent.
# Detailed training curve plot
df <- data.frame(
epoch = seq_along(history$metrics$loss),
train_loss = history$metrics$loss,
val_loss = history$metrics$val_loss,
train_acc = history$metrics$accuracy,
val_acc = history$metrics$val_accuracy
)
par(mfrow = c(1, 2))
plot(df$epoch, df$train_loss, type = 'l', col = 'blue',
xlab = 'Epoch', ylab = 'Loss', main = 'Loss')
lines(df$epoch, df$val_loss, col = 'red')
legend('topright', c('Train', 'Val'), col = c('blue','red'), lty=1)
plot(df$epoch, df$train_acc, type = 'l', col = 'blue',
xlab = 'Epoch', ylab = 'Accuracy', main = 'Accuracy')
lines(df$epoch, df$val_acc, col = 'red')Rask sjekk
Hva gjør innstillingen restore_best_weights = TRUE i callback_early_stopping()?
Oppsummering av trening og overtilpasning
Viktige punkter fra trening, validering og forebygging av overtilpasning:
- Bruk
validation_splitellervalidation_datafor å overvåke generaliseringen under treningen. plot(history)visualiserer treningskurvene – kurver som spriker, er et tegn på overtilpasning.callback_early_stopping(patience, restore_best_weights=TRUE)stopper treningen ved den optimale epoken.callback_reduce_lr_on_plateau()reduserer læringsraten når fremgangen stopper opp.callback_model_checkpoint(save_best_only=TRUE)lagrer den beste modellen på disken.- Kombiner dropout, L2-regularisering, batchnormalisering og dataaugmentering for robust trening.
# Best practice training setup
callbacks <- list(
callback_early_stopping(
monitor = 'val_loss', patience = 15,
restore_best_weights = TRUE
),
callback_reduce_lr_on_plateau(
monitor = 'val_loss', factor = 0.5, patience = 5
),
callback_model_checkpoint(
'/tmp/best.h5', monitor = 'val_accuracy',
save_best_only = TRUE
)
)
model |> fit(
x_train, y_train,
epochs = 200, batch_size = 64,
validation_split = 0.2,
callbacks = callbacks, verbose = 0
)Lær deg R med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 43
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «Trening, validering og forebygging av overtilpasning» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien R Academy, inkludert «Trening, validering og forebygging av overtilpasning», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i R Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Trening, validering og forebygging av overtilpasning»?
Overvåk val_loss, bruk Dropout og benytt tilbakekallingsfunksjoner for tidlig stopp. Du øver på R Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med R Academy?
Ingen tidligere erfaring er nødvendig. R Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Trening, validering og forebygging av overtilpasning»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne R Academy-leksjonen?
Ja. Alle R Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Sette opp Keras og TensorFlow i R
- Bygge sekvensielle modeller
- Grunnleggende konvolusjonelle nevrale nettverk
- Trening, validering og forebygging av overtilpasning