使用Keras fit_generator

时间:2018-06-04 13:46:40

标签: python tensorflow machine-learning keras keras-2

我有一个非常大的数据集,我正在使用Keras的fit_generator来训练Keras模型(tensorflow后端)。我的数据需要在整个数据集中进行规范化,但是当使用fit_generator时,我可以访问相对较小的批量数据,并且这个小批量中的数据规范化并不代表在整个数据集中规范化数据。影响非常大(我对其进行了测试,模型精度显着下降)。

我的问题是:使用Keras的fit_generator时,在整个数据集中规范化数据的正确做法是什么?最后一点:我的数据是文本和数字数据的混合,而不是图像,因此我无法使用Keras提供的图像生成器中的某些功能,这可能会解决图像数据的一些问题。

我已经考虑过在训练之前对整个数据集进行规范化(我想是“蛮力”方法),但我想知道是否有更优雅的方法来做到这一点。

2 个答案:

答案 0 :(得分:3)

生成器允许您对数据进行即时处理,但在培训之前预处理数据是首选方法:

  1. 预处理和保存避免了处理每个时期的数据,您应该只执行可应用于批处理的小操作。例如,单热编码是常见的编码,而标记化句子等可以离线完成。
  2. 您可能会调整,调整您的模型。您不希望有规范化数据的开销,并确保每个模型都训练相同的标准化数据。
  3. 因此,在训练前离线预处理并将其保存为训练数据。预测时,您可以即时处理。

答案 1 :(得分:0)

您可以通过将数据预处理到矩阵来完成此操作。一个热门编码您的文本数据:

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)  

如果连接两个矩阵,则应该正确预处理数据。我可以想象,文本将永远影响你的模型的结果太多。因此,它可以为文本和数字数据训练单独的模型。