【发布时间】:2018-04-07 03:38:02
【问题描述】:
我正在 Keras 中创建一个深度神经网络,以使用表格数据执行 NN 回归。最佳实践是标准化输入和输出序列。我还想使用predict 函数为各种输入集提供模型输出的估计值。如果训练数据被标准化,我假设我还需要使用相同的缩放参数对predict 数据集进行标准化。最好的方法是什么?有没有办法自动规范化模型中的数据?
【问题讨论】:
我正在 Keras 中创建一个深度神经网络,以使用表格数据执行 NN 回归。最佳实践是标准化输入和输出序列。我还想使用predict 函数为各种输入集提供模型输出的估计值。如果训练数据被标准化,我假设我还需要使用相同的缩放参数对predict 数据集进行标准化。最好的方法是什么?有没有办法自动规范化模型中的数据?
【问题讨论】:
我通常喜欢为此使用 sklearn,它确实保存了参数并允许您“逆变换”回原始值。对于预测,您可以通过 inverse_transform 函数发送它们以获取它们的真实预测值。
这是一个工作示例供您参考。缩放器的参数可以很容易地调整。
from sklearn.preprocessing import MinMaxScaler, StandardScaler
import numpy as np
example = np.array([0., 1., 1., 0., 2., 3., 4., 4., 5.]).reshape(-1, 1)
# MinMax Scaling Example
scaler = MinMaxScaler(feature_range=(0.01, 0.99))
min_max_scaled = scaler.fit_transform(example)
min_max_orig = scaler.inverse_transform(min_max_scaled)
# Normalizing Example (mean 0, std 1)
norm = StandardScaler()
normalized = norm.fit_transform(example)
normalized_orig = norm.inverse_transform(normalized)
【讨论】:
没有最好的方法来做到这一点(这取决于问题),但最常见的做法是对训练数据和测试数据进行归一化,使它们的均值为 0,标准差为 1。
是的,使用Batch Normalization,您可以自动规范化模型中的数据,前提是您将合理大小的批次输入网络。这可能会产生与数据增强类似的效果,因为网络在训练期间将看到的信号很少重复(因为一个示例的信号现在取决于其整个批次)。在 Keras 中,这可以通过在输入层之后添加一个BatchNorm 层来实现。
【讨论】: