Перестановка данных для классификации изображений - PullRequest
0 голосов
/ 14 апреля 2020

Я хочу разработать модель CNN для идентификации 24-х знаков на американском языке жестов. Я создал пользовательский набор данных , который содержит 3000 изображений для каждого знака руки, т. Е. 72000 изображений во всем наборе данных.

Для обучения модели я использовал бы 80-20 наборов данных (2400 изображений / знак руки в тренировочном наборе и 600 изображений / знак руки в комплекте проверки).

Мой вопрос таков: должен ли я случайным образом перемешивать изображения при создании набора данных? И почему?

Исходя из моего предыдущего опыта, это привело к тому, что потери при проверке были ниже, чем потери при обучении, а точность проверки больше, чем точность при обучении. Проверьте эту ссылку.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Вот мои два цента на топи c.

Прежде всего, убедитесь, что вы извлекли тестовый набор с одинаковым количеством образцов для каждого знака руки. (знак руки № 1 - 500 образцов, знак руки № 2 - 500 образцов и т. д.) Я думаю, что это называется стратифицированной выборкой.

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

Один из моих личных опытов с тасовкой: после разбиения тренировочного набора на обучающие и проверочные наборы, проверочный набор оказалось очень легко предсказать. Таким образом, я увидел хорошие значения метри c. Однако производительность модели на тестовом наборе была ужасной.

0 голосов
/ 15 апреля 2020

Случайная перетасовка данных является стандартной процедурой во всех конвейерах машинного обучения, и классификация изображений не является исключением; его цель состоит в том, чтобы устранить возможные отклонения во время подготовки данных - например, сначала поместить все изображения кошек, а затем собак в набор данных классификации кошка / собака.

Возьмем, к примеру, известный набор данных iris:

from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
y
# result:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

Как вы можете ясно увидеть, набор данных был подготовлен таким образом, что все первые 50 образцов имеют маркировку 0 следующие 50 ярлыков 1 и последние 50 ярлыков 2. Попробуйте выполнить 5-кратную перекрестную проверку в таком наборе данных без перемешивания, и вы обнаружите, что большинство ваших сгибов содержат только одну метку; попробуйте 3-кратное резюме, и все ваши сгибы будут включать только одну метку. Плохо ... Кстати, это не просто теоретическая возможность, это действительно произошло .

Даже если такого смещения нет, тасование никогда не повредит, поэтому мы делаем это всегда просто быть в безопасности (вы никогда не знаете ...).

Исходя из моего предыдущего опыта, это привело к тому, что потери при проверке были ниже, чем потери при обучении, а точность проверки больше, чем точность при обучении. Проверьте эту ссылку.

Как отмечается в ответе, весьма маловероятно, что это произошло из-за тасования. Перетасовка данных не является чем-то сложным - по сути, это просто эквивалент перетасовки колоды карт; могло случиться, что однажды вы настаивали на «лучшей» перетасовке, и впоследствии у вас была рука с простым гриппом sh, но, очевидно, это было не из-за «лучшей» перетасовки карт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...