我的同事和关于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)
我做错了什么或者没有必要缩放?
答案 0 :(得分:2)
对于没有正则化和线性模型的模型,通常缩放最有利。例如,没有正则化的简单均方误差丢失(如在TensorFlowLinearRegressor
中)将不能很好地处理非缩放数据。
在您的情况下,您使用的是运行softmax正则化的分类器,并且您正在使用DNN,因此不需要缩放。如果这是一件有用的事情,DNNs可以对重新缩放进行建模(通过第一层中特征的偏差和权重)。