我使用一个简单的Keras模型来进行序列预测。
我在整个系列中将它的输入标准化。
在训练过程中,模型的预测精度似乎是正确的。但是,当我绘制model.predict()函数的输出时,我可以看到输出已经以某种方式被缩放了。它似乎是某种规范化/标准化的缩放类型。
在培训中更改批处理大小会影响结果。我尝试将批处理大小设置为输入集的大小,以便在一个批处理中完成整个系列的培训,从而提高了结果,但仍然是缩放的。
我的假设是,这与每个输入批的规范化或输出规范化有关。我的模型中没有任何BatchNormalization层。
是否有一种方法可以禁用Keras中输入/输出的默认规范化/标准化(这种默认行为是否存在)?
我使用带有Tensorflow后端和Tensorflow 1.1的Keras 2。
发布于 2017-05-21 21:11:44
Keras不隐式地插入BN或任何其他规范化。
你一定是在观察别的东西。
发布于 2018-03-21 04:54:31
我想我遇到了和你一样的问题。
我查看了Keras包中的源代码,以寻找线索。在../keras/engine/training.py中,在训练、评估和预测函数中使用了一个名为_standardize_user_dara()的函数。该函数旨在标准化输入数据(似乎是通过批处理),但是在源代码中还找不到一个去标准化的函数。
据我猜测,Keras对输入数据进行标准化,但对输出数据没有进行反标准化。我不确定这一点,因为我没有检查所有的代码,这是不可能的…顺便说一下,我读了其他一些用时间序列数据实现LSTM的代码,SKlearn包被用来进行缩放和逆缩放。这可能是一个解决方案…我知道这篇文章很古老,但是如果你对Keras的标准化机制有什么想法的话,请告诉我,这会很有帮助的。
https://stackoverflow.com/questions/44100837
复制相似问题