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

Перво-наперво:

  1. Выберите базовую известную модель, которая подходит для ваших данных. (например, VGG для изображений.)
  2. Отключите все дополнительные функции, такие как регуляризация, нормализация пакетов, увеличение и т. д.
  3. При точной настройке модели этапы предварительной обработки должны быть одинаковыми.

Вопросы, которые необходимо проверить:

  1. Проверьте правильность сопоставления входных данных с выходными вручную. Иногда мы можем подавать входные данные как все нули, или мы можем повторно отправлять один и тот же пакет для обучения, или мы можем пропустить перетасовку входных данных. Поэтому может помочь ручная проверка ввода и вывода путем их печати в консоли. Было время, когда мой загрузчик данных был неисправен: P.
  2. Проверка смысла того, какую связь мы ищем между вводом и выводом. Мы должны быть в состоянии определить универсальную нетривиальную связь между входом и выходом и только после этого ожидать производительности от сети. Лично я не думаю, что сеть будет точной для несвязанных входов и выходов.
  3. Баланс классов и достаточное количество обучающих выборок. Для обучения сети с нуля вам потребуется много данных и приличный баланс на случай потерь, если в обучающих выборках по классам будет дисбаланс.
  4. Аугментация связана с регуляризацией. Слишком много аугментации с помощью L2 и регуляризации отсева может привести к несоответствию сети.
  5. Этапы предварительной обработки должны быть независимыми для обучения, тестирования и проверки. Я думаю, что это распространенная ошибка для всех, включая меня. Предварительная обработка всех данных, таких как нулевое среднее значение и единичная дисперсия, не удастся. Обучающие данные должны быть разделены, предварительно обработаны и только потом поступать на валидацию или предварительную обработку тестовых данных.
  6. Проверьте свою функцию потерь. Если вы реализовали свою собственную функцию потерь, проверьте уравнения градиента и реализацию. Часто помогают модульные тесты. Сочетание функции потерь следует учитывать при правильном взвешивании.
  7. Проверьте инициализацию веса. Я не знаю правильной математики, стоящей за этим, но инициализация веса имеет большое значение. Лучшей практикой, если вы не уверены, является инициализация xavier.
  8. Проверьте пользовательские слои. Необходимо позаботиться о нормализации и градиентном потоке через эти слои. Дважды проверьте их, иначе вы потеряете недели времени, как я. Даже уровень представления может бросить вас в яму, если он не закодирован должным образом: P.

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