禁用Keras批量标准化/标准化

时间:2017-05-21 19:17:24

标签: tensorflow keras normalization batch-normalization keras-2

我使用简单的Keras模型进行系列预测。

我正在整个系列中输入标准化的输入。

在训练期间,模型预测准确性似乎是正确的。但是,当我绘制model.predict()函数的输出时,我可以看到输出已经以某种方式缩放。它似乎是某种规范化/标准化的缩放类型。

在培训时更改批量大小会影响结果。我尝试将批量大小设置为输入集的大小,以便整个系列的训练在一个批处理中完成,这样可以改善结果,但仍然可以缩放。

我的假设是这与每个输入批量的标准化或输出标准化有关。我的模型中没有任何BatchNormalization图层。

有没有办法在Keras中禁用输入/输出的默认规范化/标准化(这种默认行为是否存在)?

我正在使用带有Tensorflow后端的Keras 2和Tensorflow 1.1。

2 个答案:

答案 0 :(得分:1)

Keras不会隐式插入BN或任何其他规范化。

你必须观察别的东西。

答案 1 :(得分:0)

我想我遇到了和你一样的问题。

我检查了Keras包中的源代码以获取线索。在../keras/engine/training.py中,一个名为_standardize_user_dara()的函数用于训练,评估和预测函数。此函数用于标准化输入数据(通过批处理,似乎),但在源代码中找不到去标准化函数。

我猜测Keras对输入数据进行了标准化,但没有对输出数据应用去标准化。我不确定这个,因为我没有检查所有代码,这是不可能的...... 顺便说一下,我读了一些用时间序列数据实现LSTM的其他代码,SKlearn软件包用于进行缩放和反向缩放。这可能是一个解决方案......我知道这篇文章很老,但如果您对Keras的这种标准化机制有任何想法,请告诉我,这将非常有帮助