Учится ли модель на основе среднего всех точек данных в мини-пакете?
Краткое содержание
Я использовал пример из -https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/5_DataManagement/tensorflow_dataset_api.py- для создания своей собственной модели классификации. Я использовал разные данные, но базовый контур наборов данных был сохранен. Было важно перемешивать данные и затем создавать тренировочный и тестовый наборы для моего типа данных. Однако проблема возникает как следствие перемешивания. Когда я обучаю свою модель с перемешанным тренировочным набором, я получаю точность +-80% для тренировочного набора и точность +-70% для тестового набора. Затем я хочу ввести все данные (то есть набор, который составлял тренировочный и тестовый наборы) в модель, чтобы увидеть полностью предсказанный вывод этого набора данных, который у меня есть. Если этот набор данных перемешивается так же, как и тренировочный и тестовый наборы, я получаю точность около 77%, что ожидаемо, но затем, если я вводлю неперемешанные данные (как мне требовалось для просмотра прогнозов), я получаю точность 45%. Как это возможно? Я предполагаю, что это связано с тем, что модель учится неправильно.
Полный текст
Задано 7 лет, 8 месяцев назад Изменено сегодня Просмотрено 1 тыс. раз
Задано 7 лет, 8 месяцев назад
5 $\begingroup$ Я использовал пример из - https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/5_DataManagement/tensorflow_dataset_api.py - для создания собственной классификационной модели. Я использовал разные данные, но базовый контур наборов данных был использован. Для моего типа данных было важно перемешивать данные и затем создавать тренировочный и тестовый наборы. Однако проблема возникла как следствие перемешивания. Когда я обучаю модель с перемешанным тренировочным набором, я получаю точность +-80% для тренировки и точность +-70% для тестового набора. Затем я хочу ввести все данные (т.е. набор, который составлял тренировочный и тестовый набор) в модель, чтобы увидеть полностью прогнозируемый вывод этого набора данных, который у меня есть. Если этот набор данных перемешивается так же, как и тренировочный и тестовый набор, то точность составляет около 77%, что ожидаемо, но если я ввожу неперемешанные данные (как мне требовалось для просмотра прогнозов), то получается точность 45%. Как это возможно? Я предполагаю, что это связано с тем, что модель учится неправильно и что она узнает, что порядок точек данных играет роль в предсказании этих точек данных. Но этого не должно происходить, поскольку я просто пытаюсь (как в примере MNIST) предсказывать каждую точку данных отдельно. Это может быть проблема мини-пакетного обучения. В приведенном выше примере, используя наборы данных и пакеты для обучения, модель учится от среднего всех точек данных в мини-пакете или она думает, что один мини-пакет – это одна точка данных и изучает ее таким образом (что означает, что порядок важен точек данных)? Или есть ли какие-либо другие предложения. глубокое обучение python tensorflow Поделиться Улучшить вопрос Подписано отредактировано 28 января 2020 г. в 1:32 nbro 43,2 тыс. 14 14 золотые значки 121 121 серебряные значки 222 222 бронзовые значки задано 22 мая 2018 г. в 9:49 Эмиль Энгелебрт 51 2 2 бронзовые значки $\endgroup$ 1 $\begingroup$ Пример, приведенный в вопросе, использует относительно простую сверточную нейронную сеть. Они не являются состоятельными, поэтому порядок запросов на прогнозы для экземпляров из тестового набора не должен влиять на эти прогнозы. В комментарии автора вопроса к своему вопросу упоминалось, что использование Batch Normalization показало, что это может быть причиной проблемы. Учитывая эту информацию, одна возможная причина проблемы, описанной в вопросе, заключается в неправильном использовании флага обучения реализации Batch Normalization TensorFlow. Официальная документация содержит следующую информацию об этом флаге: training : либо Python boolean, либо TensorFlow boolean scalar tensor (например, placeholder). Следует ли возвращать выход в режиме обучения (нормализованный с использованием статистики текущего пакета) или в режиме вывода (нормализованный с использованием скользящих статистик). ЗАМЕЧАНИЕ : убедитесь, что этот параметр установлен правильно, иначе обучение/вывод не будут работать должным образом. Если его неправильно установлено значение True вместо False за пределами фазы обучения (т.е. при оценке производительности), можно ожидать плохих прогнозов. Это само по себе не объясняет, почему конкретно порядок тестовых данных должен иметь значение, если это была бы единственная проблема, мы ожидаем, что производительность на тестировании будет плохой независимо от порядка. Другое возможное объяснение заключается в том, что в коде есть ошибка, которая все еще вызывает операции moving_mean и moving_variance Batch Normalization.