fine_tune() vs fit_one_cycle()
from fastai.vision.all import *
path = untar_data(URLs.MNIST)
path.ls()
Path.BASE_PATH = path
path.ls(), (path/'testing').ls()
fname = get_image_files(path)
fname[:5], parent_label(fname[0])
mnist = DataBlock(
blocks = [ImageBlock(cls=PILImageBW), CategoryBlock],
get_items=get_image_files,
splitter=GrandparentSplitter('training', 'testing'),
get_y=parent_label)
mnist.summary(path)
dls = mnist.dataloaders(path, bs=256)
dls.show_batch(ncols=9, figsize=(4,4))
X, y = dls.valid.one_batch()
X.shape, y.shape, X[0,0,:14,14], y[:9]
learn = vision_learner(dls, resnet18, metrics=accuracy)
learn.fine_tune(1, base_lr=0.1)
learn = vision_learner(dls, resnet18, metrics=accuracy)
#lr_min,lr_steep = learn.lr_find(suggest_funcs=(minimum, steep))
learn.lr_find()
learn.fine_tune(1, base_lr=0.03)
learn = vision_learner(dls, resnet18, metrics=accuracy)
learn.fit_one_cycle(3, 0.03)
learn.unfreeze()
learn.lr_find()
learn.fit_one_cycle(6, lr_max=5e-5)
learn = vision_learner(dls, resnet18, metrics=accuracy)
learn.fit_one_cycle(3, 0.03)
learn.unfreeze()
learn.fit_one_cycle(12, lr_max=slice(1e-6,1e-4))
learn.recorder.plot_loss()
from fastai.callback.fp16 import *
learn = vision_learner(dls, resnet50, metrics=accuracy).to_fp16()
learn.fine_tune(6, freeze_epochs=3)