Я создаю классификатор, используя набор данных Food-101. В наборе данных есть предопределенные наборы для обучения и тестирования, оба помечены. Всего 101 000 изображений. Я пытаюсь построить модель классификатора с точностью> = 90% для топ-1. Я сейчас сижу на 75%. Тренировочный набор был предоставлен нечистым. Но теперь я хотел бы узнать, как я могу улучшить свою модель, и какие вещи я делаю неправильно.
Я разделил поезд и тестовые изображения по соответствующим папкам. Здесь я использую 0,2 из набора обучающих данных для проверки учащегося, запустив 5 эпох.
np.random.seed(42)
data = ImageList.from_folder(path).split_by_rand_pct(valid_pct=0.2).label_from_re(pat=file_parse).transform(size=224).databunch()
top_1 = partial(top_k_accuracy, k=1)
learn = cnn_learner(data, models.resnet50, metrics=[accuracy, top_1], callback_fns=ShowGraph)
learn.fit_one_cycle(5)
epoch train_loss valid_loss accuracy top_k_accuracy time
0 2.153797 1.710803 0.563498 0.563498 19:26
1 1.677590 1.388702 0.637096 0.637096 18:29
2 1.385577 1.227448 0.678746 0.678746 18:36
3 1.154080 1.141590 0.700924 0.700924 18:34
4 1.003366 1.124750 0.707063 0.707063 18:25
И здесь я Пытаюсь найти скорость обучения. Довольно стандартно для того, как это было на лекциях:
learn.lr_find()
learn.recorder.plot(suggestion=True)
LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.
Min numerical gradient: 1.32E-06
Min loss divided by 10: 6.31E-08
Использование скорости обучения 1e-06 для прохождения еще 5 эпох . Сохранение его как stage-2
learn.fit_one_cycle(5, max_lr=slice(1.e-06))
learn.save('stage-2')
epoch train_loss valid_loss accuracy top_k_accuracy time
0 0.940980 1.124032 0.705809 0.705809 18:18
1 0.989123 1.122873 0.706337 0.706337 18:24
2 0.963596 1.121615 0.706733 0.706733 18:38
3 0.975916 1.121084 0.707195 0.707195 18:27
4 0.978523 1.123260 0.706403 0.706403 17:04
Раньше я выполнял всего 3 этапа, но модель не улучшалась выше 0,706403, поэтому я не хотел повторять. Ниже представлена моя матрица путаницы. Прошу прощения за ужасное разрешение. Это работа Colab.
Поскольку я создал дополнительный набор для проверки, я решил использовать набор для проверки сохраненной модели stage-2, чтобы увидеть, насколько хорошо он работает:
path = '/content/food-101/images'
data_test = ImageList.from_folder(path).split_by_folder(train='train', valid='test').label_from_re(file_parse).transform(size=224).databunch()
learn.load('stage-2')
learn.validate(data_test.valid_dl)
Это результат:
[0.87199837, tensor(0.7584), tensor(0.7584)]