是否需要为 skflow.TensorFlowDNNClassifier 缩放数据?
Is it desirable to scale data for skflow.TensorFlowDNNClassifier?
我的同事和 Cross Validated 上的这个问题说您应该将数据转换为神经网络的零均值和单位方差。但是,我的表现在有缩放的情况下比没有缩放时稍差。
我尝试使用:
scaler = preprocessing.StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
steps = 5000
def exp_decay(global_step):
return tf.train.exponential_decay(
learning_rate=0.1, global_step=global_step,
decay_steps=steps, decay_rate=0.01)
random.seed(42) # to sample data the same way
classifier = skflow.TensorFlowDNNClassifier(
hidden_units=[150, 150, 150],
n_classes=2,
batch_size=128,
steps=steps,
learning_rate=exp_decay)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
我是不是做错了什么或者不需要缩放?
通常,对于没有正则化和线性模型的模型,缩放最有好处。例如,没有正则化的简单均方误差损失(如 TensorFlowLinearRegressor
)在未缩放数据上效果不佳。
在您的情况下,您使用的是运行 softmax 正则化的分类器并且您使用的是 DNN,因此不需要缩放。 DNN 本身可以对缩放进行建模(通过第一层特征的偏差和权重),如果这样做有用的话。
我的同事和 Cross Validated 上的这个问题说您应该将数据转换为神经网络的零均值和单位方差。但是,我的表现在有缩放的情况下比没有缩放时稍差。
我尝试使用:
scaler = preprocessing.StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
steps = 5000
def exp_decay(global_step):
return tf.train.exponential_decay(
learning_rate=0.1, global_step=global_step,
decay_steps=steps, decay_rate=0.01)
random.seed(42) # to sample data the same way
classifier = skflow.TensorFlowDNNClassifier(
hidden_units=[150, 150, 150],
n_classes=2,
batch_size=128,
steps=steps,
learning_rate=exp_decay)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
我是不是做错了什么或者不需要缩放?
通常,对于没有正则化和线性模型的模型,缩放最有好处。例如,没有正则化的简单均方误差损失(如 TensorFlowLinearRegressor
)在未缩放数据上效果不佳。
在您的情况下,您使用的是运行 softmax 正则化的分类器并且您使用的是 DNN,因此不需要缩放。 DNN 本身可以对缩放进行建模(通过第一层特征的偏差和权重),如果这样做有用的话。