我使用简单的Keras模型进行系列预测。
我正在整个系列中输入标准化的输入。
在训练期间,模型预测准确性似乎是正确的。但是,当我绘制model.predict()
函数的输出时,我可以看到输出已经以某种方式缩放。它似乎是某种规范化/标准化的缩放类型。
在培训时更改批量大小会影响结果。我尝试将批量大小设置为输入集的大小,以便整个系列的训练在一个批处理中完成,这样可以改善结果,但仍然可以缩放。
我的假设是这与每个输入批量的标准化或输出标准化有关。我的模型中没有任何BatchNormalization
图层。
有没有办法在Keras中禁用输入/输出的默认规范化/标准化(这种默认行为是否存在)?
我正在使用带有Tensorflow后端的Keras 2和Tensorflow 1.1。
答案 0 :(得分:1)
Keras不会隐式插入BN或任何其他规范化。
你必须观察别的东西。
答案 1 :(得分:0)
我想我遇到了和你一样的问题。
我检查了Keras包中的源代码以获取线索。在../keras/engine/training.py中,一个名为_standardize_user_dara()的函数用于训练,评估和预测函数。此函数用于标准化输入数据(通过批处理,似乎),但在源代码中找不到去标准化函数。
我猜测Keras对输入数据进行了标准化,但没有对输出数据应用去标准化。我不确定这个,因为我没有检查所有代码,这是不可能的...... 顺便说一下,我读了一些用时间序列数据实现LSTM的其他代码,SKlearn软件包用于进行缩放和反向缩放。这可能是一个解决方案......我知道这篇文章很老,但如果您对Keras的这种标准化机制有任何想法,请告诉我,这将非常有帮助