Как восстановить исходные значения после предсказания модели в keras?

Это более концептуальный вопрос, но я должен признаться, что с ним какое-то время занимался.

Предположим, вы хотите обучить нейронную сеть (NN), используя, например, keras. Как рекомендуется, вы выполняете перед тренировкой нормализацию или стандартизацию данных, так, например, со стандартизацией:

x_new = (x_old - mean)/standarddev 

Затем вы продолжаете обучение ( model.fit в keras) и минимизируете функцию потерь, все очень приятно.

Изменить: В моем случае у меня есть набор значений от 200 до 400. Это NN с 1 входным, 1 выходным. Я стандартизую, как сказано, входные значения И ожидаемые значения, поэтому NN стандартизованно оценивает веса и предубеждения.

Теперь представьте, что у меня есть совершенно новый набор данных значений от 200 до 400, и я хочу предсказать выход, используя NN с предыдущим обучением. Вы можете использовать model.predict(x) в keras, при этом x полностью новый набор значений, которые я получил, стандартизован (или нормализован), потому что ваш NN был обучен таким образом. Но тогда, что я получаю, после того, как predict представляет собой набор значений, стандартизованных, но я хочу сопоставить их с обычным диапазоном от 200 до 400 . И я не знаю, как это сделать.

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

Спасибо.

3 Solutions collect form web for “Как восстановить исходные значения после предсказания модели в keras?”

Хорошо, я думаю, что я правильно понял вашу проблему, поэтому я попытаюсь объяснить вам, как бороться с нормализацией данных:

1. Предположения о распределении входных и выходных данных: обычно в тренинге по нейронной сети – вы предполагаете, что ваши данные (как входные, так и выходные) исходят из некоторых вероятностных распределений: назовем его X для ввода и Y вывода. Есть несколько причин сделать это распределение равным нулю и с единичным стандартным отклонением на этапе обучения.

2. Статистическая часть нормализации и восстановления данных: из-за этого вам нужно решить другую задачу во время обучения вашей сети. Эта задача заключается в оценке среднего и стандартного отклонения как входного распределения X, так и выходного распределения Y. Вы делаете это, просто применяя эмпирическое среднее и стандартное отклонение к вашим данным обучения.

3. Фаза приложения – входные данные: когда вы применяете свою модель к новому входу, вы также предполагаете, что ваш вход поступает из распределения X, поэтому вам также нужно стандартизировать его как нулевое среднее и стандартное отклонение единицы, а вот смешная часть – вы можете используйте как набор тренировок, так и набор новых данных, чтобы получить еще лучшую оценку среднего и стандартного отклонения X, но чтобы избежать переопределения в случае проверки – вы обычно используете среднее и стандартное отклонение, полученные на этапе обучения, чтобы сделать новые данные стандартизованными.

4. Фаза приложения – выходы: эта часть сложнее, потому что, когда вы применяете свою сеть к новым стандартным входам, вы получаете новые выходы из Y * ~ (Y – среднее значение (Y)) / sd '(Y), где среднее значение (Y) и sd '(Y) – это оценка среднего и стандартного отклонения, полученная эмпирически из вашего учебного набора, а Y – оригинальное распределение вашего результата. Это связано с тем, что во время тренировки вы подаете свой оптимизатор с выходными данными из этого распределения. Поэтому, чтобы ваши выходные данные были восстановлены, вам необходимо применить преобразование: Y * * sd '(Y) + mean' (Y) . что обратное к преобразованию стандартизации.

РЕЗЮМЕ:

Ваш этап обучения и применения выглядит следующим образом:

  1. Вы получаете статистику, необходимую для фазы обучения и фазы применения, путем вычисления эмпирического среднего и стандартного отклонения ваших входов обучения ( среднее значение (X) и sd '(X) и эмпирическое среднее и стандартное отклонение ваших выходов ( среднее значение (Y) и sd '(Y) ). Важно хранить их, потому что они понадобятся на этапе приложения.
  2. Вы оцениваете как ваши входные, так и выходные данные равными нулю и единичным стандартным отклонением и обучаете свою модель на них.
  3. Во время фазы приложения вы выделяете свои входы путем вычитания его с помощью сохраненного среднего значения (X) и деления на сохраненные sd '(X) для получения нового выхода Y *
  4. Вы деандаризируете свои выходы с использованием сохраненных средних значений (Y) и sd '(Y) – полученных на этапе обучения – путем преобразования (Y * * sd' (Y) + mean '(Y) .

Я надеюсь, что этот ответ решит вашу проблему и не оставит вас без каких-либо сомнений в деталях стандартизации и деандаризации ваших данных 🙂

Вы определили свои значения ввода / вывода со следующей формулой:

 X_s = (X - mean) / std 

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

 X = X_s * std + mean 

Например, предположим, что для вашего диапазона [200, 400] среднее значение равно 300, а стандартное отклонение равно 100. Затем скажем, что для нормализованного значения 0,5 ненормированное значение:

 X = 0.5 * 100 + 300 = 350 

Если вы не сохранили среднее значение / std, то вы не сможете восстановить исходные значения.

В зависимости от того, как вы оцениваете свои результаты или нет:

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

2. Если да: тогда вы сохраняете свое среднее значение / sd и нестарализовываете свой результат просто с помощью (output * sd) + mean .

  • Python, почему моя вероятностная нейронная сеть (PNN) всегда предсказывает нули?
  • Как создать набор данных изображений так же, как набор данных MNIST?
  • Как записать вывод потери Keras в файл
  • Невозможно обучить нейронную сеть решению XOR-сопоставления
  • сделать pycaffe фатальной ошибкой: файл «Python.h» не найден
  • Почему для этой модели Keras требуется более 6 ГБ памяти?
  • Когда я запускаю CNN, я получаю жалобы от Keras, которые не имеют для меня никакого смысла.
  • Можно ли запустить модели caffe в наборе данных, который не хранится в источнике данных, таком как LMDB?
  •  
    Interesting Posts for Van-Lav

    Динамические семантические ошибки в Python

    Лучший способ отправить электронную почту с Python на Mac или Linux?

    numpy / scipy: создание одной серии сходится к другой через некоторое время

    Создавайте задачи сельдерея, затем выполняйте синхронно

    Как смоделировать функцию drem / остатка GNU C Library в среде выполнения приложений Google App Engine Python 2.7?

    Заполнение отношения «многие-ко-многим» SQLAlchemy с использованием идентификаторов вместо объектов

    Как вы можете объединить unittest2 и coverage.py?

    Найдите, какой libjpeg используется PIL / PILLOW

    Регистрация в тестах py.test

    Python: ускоренная работа для индексирования

    Почему subprocess.Popen returncode отличается для подобных команд с bash

    Сравнение дат для проверки старых файлов

    Python Wand генерирует много временных файлов

    Как тестировать программы Python для начинающих студентов, которые используют input () (возможно, с unittest?)?

    numpy: применение argsort к массиву

    Python - лучший язык программирования в мире.