Протестируйте нейронную сеть с помощью Keras Python

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

 model.fit (data, output_data)
 prediction=model.predict_classes(new_test)
 print "Prediction : " prediction

Получение правильного вывода:

  Prediction: [1 2 3 4 5 1 2 3 1 2 3]
  Acc: 100%

Теперь я бы протестировал новый набор тестов, а именно «new_test2.csv», без повторного обучения, просто используя то, чему научилась сеть. Я также думаю о своего рода распознавании в реальном времени.

Как мне это сделать?

заранее спасибо


person J.Klow    schedule 19.06.2017    source источник


Ответы (2)


В вашем тренировочном файле вы можете сохранить модель, используя

model.save('my_model.h5')

Позже, когда вы захотите протестировать, вы можете загрузить его с помощью

from keras.models import load_model
model = load_model('my_model.h5')

Затем вы можете позвонить model.predict и еще много чего.

person cs95    schedule 19.06.2017

С хорошо обученной моделью вы можете делать прогнозы на любых новых данных. Вам не нужно ничего переучивать, потому что (надеюсь) ваша модель может обобщить свое обучение на невидимых данных и достичь сопоставимой точности.

Просто введите данные из "new_test2.csv" в свою функцию прогнозирования:

prediction=model.predict_classes(content_of_new_test2)

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

Если вам нужны прогнозы в реальном времени, вы можете настроить API с помощью Flask:

http://flask.pocoo.org/

Относительно терминологии и правильного метода обучения:

Вы тренируетесь на тренировочной выборке (например, на 70 % всех имеющихся у вас данных).

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

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

После этого вы можете прогнозировать по производственным данным.

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

from keras.models import load_model

model.save('my_model.h5')  # creates a HDF5 file 'my_model.h5'
del model  # deletes the existing model

# returns a compiled model
# identical to the previous one
model = load_model('my_model.h5') 

https://keras.io/getting-started/faq/#how-can-i-save-a-keras-model

person petezurich    schedule 19.06.2017
comment
Спасибо за ваш ответ. Вы можете придумать сценарий, который включает в себя весь обучающий и тестовый код для тестирования новых записей. С помощью всего одного скрипта я каждый раз переобучаю сеть, чтобы предсказать результат для нового набора тестов. Мой предыдущий запрос касается того, как мне следует поступить, чтобы сохранить/вызвать обученную нейронную сеть для тестирования нового набора данных. По сути, мне нужно что-то, что хранит мою сеть и пытается распознать что-нибудь из ее знаний. надеюсь понятно выразился. @petezurich - person J.Klow; 19.06.2017
comment
Из вашего вопроса и комментария мне не совсем ясно, верен ли ваш метод разделения ваших данных на данные обучения, проверки и тестирования. Смотрите мое описание в моем ответе. Очень важно действовать таким образом, иначе вы получите неправильные результаты. - person petezurich; 19.06.2017
comment
За то, что старались исправить основную проблему... (+1) - person cs95; 19.06.2017