Retraining model after data cleaning

Hi, I’m in the second lesson of the course, where I’m training a Bear Classifier. I have trained the model and cleaned the data as shown in the code below. How should I retrain the model? I have seen the following options:

  1. Use only: learn.fine_tune(4)
  2. Redefine the Learner and use fine_tune:
learn = vision_learner(dls, resnet18, metrics=error_rate) 
learn.fine_tune(4)
  1. Redefine the DataBlock, Data Loader, Learner, and use fine_tune

My code:

from fastai.vision.all import *
from fastbook import *
bear_types = 'grizzly','black','teddy'
path = Path('bears')
if not path.exists():
    path.mkdir()
    for o in bear_types:
        dest = (path/o)
        dest.mkdir(exist_ok=True)
        results = search_images_ddg(f'{o} bear')
        download_images(dest, urls=results)
fns = get_image_files(path)
fns
failed = verify_images(fns)
failed
failed.map(Path.unlink);
label_function = parent_label
bears = DataBlock(
    blocks=(ImageBlock, CategoryBlock),
    get_items=get_image_files,
    splitter=RandomSplitter(valid_pct=0.2, seed=42),
    get_y=label_function,
    item_tfms=Resize(128))
dls = bears.dataloaders(path)
dls.valid.show_batch(max_n=4, nrows=1)
bears = bears.new(
    item_tfms=RandomResizedCrop(224, min_scale=0.5),
    batch_tfms=aug_transforms())
dls = bears.dataloaders(path)
dls.train.show_batch(max_n=8, nrows=2, unique=True)
learn = vision_learner(dls, resnet18, metrics=error_rate)
learn.fine_tune(4)
interp = ClassificationInterpretation.from_learner(learn)
interp.plot_confusion_matrix()
interp.plot_top_losses(5, nrows=1, figsize=(17,4))
from fastai.vision.widgets import ImageClassifierCleaner
cleaner = ImageClassifierCleaner(learn)
cleaner
for idx in cleaner.delete(): cleaner.fns[idx].unlink()
for idx,cat in cleaner.change(): shutil.move(str(cleaner.fns[idx]), path/cat)