Форум программистов, компьютерный форум, киберфорум
Наши страницы
jvf
Войти
Регистрация
Восстановить пароль
Оценить эту запись

95,5 процентов аккуратности с помощью тонкой настройки нейронной сети

Запись от jvf размещена 31.05.2018 в 18:25

В прошлых блогах я писал о том, что решил написать несколько нейронных сетей для развлечения, в том числе и для дрессировки, тренировки, развлечения своей кошки.

Тогда удалось добиться точности на тестовой выборе в 80 с небольшим процентов.

Сегодня точность превзошла 90 процентов и достигла отметки в 95.45 процентов.

Считаю, что это уже неплохой результат, хотя у меня всего 600 изображений. Такой результат уже позволяет использовать программу по назначению.

На youtube появились уроки Андрея Созыкина, благодаря которым писать простые программы с помощью нейронных сетей теперь может каждый. Андрей Созыкин рассказал о двух вещах: о переносе обучения и тонкой настройке нейронной сети.

На github выложен его код: https://github.com/sozykin/dlpython_...gs_vgg16.ipynb

Я запустил его код на своих примерах и добился точности в 94 процентов на своих данных!

Мы видим, что аккуратность после 3 эпох достигла почти 85 процентов.
Epoch 1/3
309/309 [==============================]309/309 [==============================] - 315s 1s/step - loss: 0.6682 - acc: 0.6246 - val_loss: 0.5165 - val_acc: 0.8188

Epoch 2/3
309/309 [==============================]309/309 [==============================] - 309s 1s/step - loss: 0.5201 - acc: 0.7540 - val_loss: 0.4438 - val_acc: 0.8623

Epoch 3/3
309/309 [==============================]309/309 [==============================] - 308s 998ms/step - loss: 0.4757 - acc: 0.7702 - val_loss: 0.4203 - val_acc: 0.8478

Аккуратность на тестовых данных: 86.57%

После же тонкой настройки точность взлетела почти на 10 процентов.

Epoch 1/2
309/309 [==============================]309/309 [==============================] - 453s 1s/step - loss: 0.3410 - acc: 0.8544 - val_loss: 0.2326 - val_acc: 0.9203

Epoch 2/2
309/309 [==============================]309/309 [==============================] - 492s 2s/step - loss: 0.1922 - acc: 0.9239 - val_loss: 0.1832 - val_acc: 0.9348

Аккуратность на тестовых данных: 94.03%

То есть тонкая настройка нейронной сети действительно полезна.

В одном из прошлых комментариев мне предложили использовать зеркальные фотографии для увеличения точности.

Я это и сделал с помощью функции flip.

Допустим, у нас есть изображение image. С помощью
Python
1
cv2.flip(img, 1)
Можно получить зеркальный снимок. Я скопировал в папку train обычные фотографии и зеркальные, а в папке validation и test всё оставил по-старому. В конце концов моя камера будет реагировать не на зеркальные снимки, а на обычные, поэтому тестировать нужно на обычных данных.

Я полагаю, что с помощью зеркальных снимков точность увеличится, но после переноса обучения нейронной сети точность снизилась на 1 процент.

Аккуратность на тестовых данных: 83.33%

После же тонкой настройки нейронной сети аккуратность с использование зеркальных изображений выросла на почти 1,5 процента.

Аккуратность на тестовых данных: 95.45%

Вывод -- добавление зеркальных данных помогло поднять аккуратность на 1,45%. Неплохо.


2. Интересное видео о машинном обучении:


Анализ признаков, извлеченных нейросетью
https://www.youtube.com/watch?v=JCgwGD_FXbQ



Интересные мысли из ролика:

1. Ранее, если мы хотели использовать сеть VGG16 для других задач, мы меняли классификатор сети VGG16 на другой.
2. Новый подход: оставляем только ту часть, которая отвечает за выделение конкретных признаков.
3. На выходе мы получим вектор признаков.
4. Мы не добавляем новый классификатор, а работаем с этими признаками
5. Вместо задачи классификации изображения, мы изучаем задачу классификации признаков.
6. Затем сохраняем эти признаки в файл
7. Создаём простую полносвязную нейронную сеть, которая будет заниматься классификацией признаков.
8. Основное преимущество такого метода -- скорость
9. Недостаток -- точность ниже, чем если бы мы использовали классификатор для VGG16

3. Интересные тексты:


https://www.kaggle.com/toregil/welcome-to-deep-learning-cnn-99

Автор написал скрипт, которые достигает 99% точности на соревновании MNIST.

Мы видим несколько интересные вещей, например, он использует BatchNormalization(). В тексте сказано, что этот трюк делает обучение быстрее.
Размещено в Без категории
Просмотров 339 Комментарии 1
Всего комментариев 1
Комментарии
  1. Старый комментарий
    Аватар для Usaga
    Я бы не стал серьёзно воспринимать видосы, где уже в самом названии автор умудрился ошибку сделать (лишняя запятая).
    Запись от Usaga размещена 01.06.2018 в 06:04 Usaga на форуме
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru