Ho organizzato cose su cui ero confuso o che capivo solo vagamente.
Ordine di training e validation
def train(): for epoch in range(epcoh): training() validate()Questo ordine è corretto. La versione sotto allena comunque il modello sui dati di input:
def train(): for epoch in range(epcohs): training() for epoch in range(epcohs): validate()Il problema è che la validation avviene solo dopo che tutto il training è completato. Si valida ripetutamente il modello finale già allenato per ogni epoch. Uno spreco di risorse.
Con l’ordine corretto, si può validare il risultato dell’apprendimento di ogni step e rifletterlo nella valutazione.
K fold cross validation
Come dice il nome, è una tecnica di validation. Quindi non andrebbe usata per il training in questo modo:
def train(): for epoch in range(epcohs): training() for epoch in range(epcohs): validate()def kfoldvalidate() # do something...
train()kfoldvalidatie()Penso che potrebbe essere usata nel training, ma in tal caso probabilmente sarebbe qualcosa del genere con l’ensemble learning (pura speculazione…):
def train(): model_list = MakeManyModel() for idx, train_set, validate_set in enumerate(kfold(dataset)): for epoch in range(epcohs): training(mode_list[idx]) for epoch in range(epcohs): validate(model_list[idx]) return model_listdef kfoldvalidate(model_list) SelectBestModel(model_list)
train()for i in range(k): kfoldvalidatie()Un modello per ogni fold, e si seleziona il migliore tra i k modelli. Si potrebbe anche usare il voting come nell’ensemble learning vero e proprio invece di scegliere il singolo modello migliore. Non l’ho provato perché consumerebbe troppe risorse..