Tensorflow / Keras:规范化训练/测试/实时数据或如何处理现实?

Posted

技术标签:

【中文标题】Tensorflow / Keras:规范化训练/测试/实时数据或如何处理现实?【英文标题】:Tensorflow / Keras: Normalize train / test / realtime Data or how to handle reality? 【发布时间】:2020-01-24 06:58:26 【问题描述】:

我开始开发一些 LSTM 模型,现在有一些关于标准化的问题。

假设我有一些时间序列数据,大致介于 +500 和 -500 之间。将数据从 -1 缩放到 1 是否更现实,或者 0 到 1 是更好的方法,我对其进行了测试,0 到 1 似乎更快。有错误的方法吗?还是只是学起来比较慢?

第二个问题:何时对数据进行标准化?我将数据分为训练数据和测试数据,我是否必须分别缩放/规范化这些数据?也许训练数据的范围仅在 +300 到 -200 之间,而测试数据的范围在 +600 到 -100 之间。我猜那不是很好。

但另一方面...如果我对整个数据帧进行缩放/规范化并在此之后对其进行拆分,则数据可以很好地用于训练和测试,但是如何处理真正的新传入数据?该模型被训练为缩放数据,所以我也必须缩放新数据,对吗?但是如果新数据是 1000 呢?归一化会将其变成大于 1 的值,因为它的数字比之前的所有数字都大。

长话短说,我什么时候应该对数据进行规范化,以及全新的数据会发生什么?

我希望我能弄清楚我的问题是什么:D

非常感谢!

【问题讨论】:

【参考方案1】:

也想知道如何处理现实……

严肃地说:

1。如何规范化数据

通常,神经网络受益于来自高斯标准分布的数据(均值 0 和方差 1)。

批量归一化(简化)等技术有助于神经网络在整个网络中具有这种特性,因此通常是有益的。

您还提到了其他方法,可以可靠地告诉您哪些方法有助于您只需要检查和衡量哪个问题和特定架构。

2。测试数据呢?

应从您的训练数据集中收集平均减法和除以每个实例的方差(或您通过前面提到的任何归一化方案收集的任何其他统计数据)。如果您从测试中获取它们,则会执行数据泄漏(有关测试分布的信息已包含在训练中),并且您可能会误以为您的算法比实际执行得更好。

因此,只需计算训练数据集的统计数据,并将它们也用于传入/验证/测试数据。

【讨论】:

感谢您的回答 Szymon。如果我理解正确,我会从我的测试数据中获取标准化比例并将其用于我将来输入的任何其他数据,如果它是测试数据或生产中的真实数据,则没有区别。这意味着规模可能会超过 1,但这是我(或者更确切地说是模型)必须忍受的东西,对吧?我可以不时将模型拟合到新数据以获得正确的比例。 我脑海中又浮现出一个问题。功能呢?将来我想添加一些数据来提高我的准确性。我是否也必须缩放它们?他们有自己的缩放比例吗?再次感谢你:) 如果您也能够为测试集创建这些功能,您可以共同扩展它们

以上是关于Tensorflow / Keras:规范化训练/测试/实时数据或如何处理现实?的主要内容,如果未能解决你的问题,请参考以下文章

如何将训练有素的 Tensorflow 模型转换为 Keras?

Tensorflow (Keras) U-Net 分割训练失败

Tensorflow,Keras:如何创建仅在特定位置更新的可训练变量?

如何使用 gpu 并行训练 tensorflow.keras 模型? TensorFlow 版本 2.5.0

使用基本的低级 TensorFlow 训练循环训练 tf.keras 模型不起作用

使用 tensorflow 训练 keras:标记对象或同一对象上的多个标签的冗余