Различные выходные данные модели при проверке во время обучения и выводе с контрольной точкойPython

Программы на Python
Anonymous
Различные выходные данные модели при проверке во время обучения и выводе с контрольной точкой

Сообщение Anonymous »

Я обучаю модель с помощью pytorch Lightning и сохраняю файл контрольной точки (ckpt) с параметрами для дальнейшего использования. Он работает хорошо, за исключением одной новой модели.
Поэтому я отладил вывод, чтобы выяснить, почему эта новая модель ведет себя совсем по-другому при выводе с контрольной точкой. Несколько замечаний, прежде чем идти дальше:
  • основное различие между моделями — это входные данные (остальные, то есть гиперпараметры, эквивалентны или очень близки)
    модель имеет ту же структуру, что и предыдущие, которые работают хорошо (те же слои, тот же оптимизатор (например, AdamW), небольшие различия в скорости затухания весов, например) или функция вознаграждения/потери была изменена -> теоретически это не должно влиять на вывод)
  • Я использую молнию pytorch (2.0) и факел (2.3)
  • поведение одинаково во время выполнения Cuda, Cpu или Mps (оба используются для обучения и вывода)
  • Я использую набор проверочных данных, на котором рассчитываю производительность после каждой эпохи обучения . Я получаю хорошие результаты, независимо от модели или входных данных, в наборе данных проверки
  • проверка выполняется на временных данных, и модель дает выходную пропорцию с определенное количество прошлых данных
Что я обнаружил, делая вывод:
  • Первый вывод (т.е. первая строка ниже на изображении) равен тому, что я получил в первом результате проверки на этапе обучения (в ту же эпоху для вывода и проверки).
  • В целом, вывод хороший, но один элемент заставляет вывод колебаться и чередоваться с набором проверочных данных.
  • Я не могу понять, откуда берутся эти колебания
  • Я проверил файлы ckpts и веса, и все они выглядят нормально.
  • Одно отличие заключается в том, что во время обучения метрики проверки рассчитываются на полном наборе проверочных данных, в отличие от вывода, при котором рассчитываются метрики. один за другим по одной и той же временной серии (вывод одинаков для обоих, но val выполняется за один проход в сети, а вывод является циклическим -> передача один за другим)
  • Что меня больше всего беспокоит, так это то, что на этапе проверки (во время обучения) все ОК, но НЕ ОК после загрузки контрольной точки и выполнения вывода вручную. И до сих пор это работает для всех моих предыдущих моделей.
Пример вывода (левый вывод, правая проверка в поезде) с той же моделью/той же эпохой. Изображение стоит тысячи слов:
Изображение

Я ожидаю того же (т.е. почти одного и того же цвета) слева и справа, но что-то создает шум при прогнозировании вывода. Как вы можете видеть, первая строка подходит для вывода, но колебания начинаются сразу после этого.
Например, другой прогон val vs inference (очень небольшие отклонения, но терпимые, но колебаний здесь нет)< /p>
Изображение

Что могло бы объяснить эти колебания в одной и той же сетевой архитектуре?
ps: Невозможно поделиться прямым кодом из-за лицензии

Подробнее здесь: https://stackoverflow.com/questions/788 ... with-check

Вернуться в «Python»