Как нормализовать данные при использовании Keras fit_generator

У меня очень большой набор данных, и я использую fit_generator Keras для обучения модели Keras (бэкэнд тензорного потока). Мои данные необходимо нормализовать по всему набору данных, однако при использовании fit_generator у меня есть доступ к относительно небольшим пакетам данных, и нормализация данных в этом небольшом пакете не соответствует нормализации данных по всему набору данных. Влияние довольно велико (я его тестировал, точность модели значительно ухудшилась).

Мой вопрос таков: какова правильная практика нормализации данных по всему набору данных при использовании fit_generator Keras? И последнее: мои данные представляют собой смесь текстовых и числовых данных, а не изображений, и, следовательно, я не могу использовать некоторые из возможностей предоставленного Keras генератора изображений, который может решить некоторые проблемы с данными изображения.

Я рассмотрел нормализацию полного набора данных перед обучением (я полагаю, что это метод «грубой силы»), но мне интересно, есть ли более элегантный способ сделать это.


person Eric Broda    schedule 04.06.2018    source источник
comment
Попробуйте найти здесь   -  person Tristhal    schedule 04.06.2018


Ответы (2)


Генератор позволяет вам выполнять обработку данных на лету, но предварительная обработка данных перед обучением является предпочтительным подходом:

  1. Предварительная обработка и сохранение позволяют избежать обработки данных для каждой эпохи, вам действительно следует просто выполнять небольшие операции, которые можно применять к пакетам. Например, одноразовое горячее кодирование является распространенным, тогда как токенизация предложений и т. Д. Может выполняться в автономном режиме.
  2. Вы, вероятно, будете настраивать свою модель. Вы не хотите иметь накладные расходы на нормализацию данных и гарантировать, что каждая модель обучается на одних и тех же нормализованных данных.

Итак, предварительно обработайте один раз в автономном режиме перед тренировкой и сохраните ее как данные тренировки. При прогнозировании вы можете обрабатывать данные на лету.

person nuric    schedule 04.06.2018

Вы можете сделать это путем предварительной обработки ваших данных в матрицу. Одно горячее кодирование ваших текстовых данных:

from keras.preprocessing.text import Tokenizer
# X is a list of text elements
t = Tokenizer()
t.fit_on_texts(X)
X_one_hot = t.texts_to_matrix(X)

и нормализовать ваши числовые данные с помощью:

for i in range(len(matrix)):
  refactored_array = (matrix[i]- np.min(matrix[i], 0)) / (np.max(matrix[i], 0) + 0.0001)  

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

person r3dapple    schedule 04.06.2018