【问题标题】:How to scale new data coming into a neural network after it's been trained训练后如何扩展进入神经网络的新数据
【发布时间】:2017-11-09 17:25:55
【问题描述】:

我有一个训练有素的神经网络,效果非常好,但我事先对数据进行了缩放 [sklearn preprocessing.scale(X)]。这很好用,但是当我保存模型并想向其中输入新数据时该怎么办?如何确保缩放与训练时相同?

df = pd.read_csv("Trimmed Training Data.csv", delimiter=",")

X = np.array(df.drop(['PredictThis'],1))
y = np.array(df['PredictThis'])

X = preprocessing.scale(X)


# create NN model
model = Sequential()
# 2 inputs, 10 neurons in 1 hidden layer, with tanh activation and dropout
model.add(Dropout(0.2, input_shape=(15,)))
model.add(Dense(100, init='uniform', input_shape=(15,), activation='relu')) 
model.add(Dropout(0.2))
model.add(Dense(100, init='uniform', input_shape=(100,), activation='relu')) 
model.add(Dropout(0.2))
model.add(Dense(5, init='uniform', input_shape=(100,), activation='relu')) 
model.add(Dropout(0.2))
model.add(Dense(1, init='uniform', activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='rmsprop')

# Fit the model
model.fit(X, y, nb_epoch=25, batch_size=15)

【问题讨论】:

  • 您可能应该找出预处理使用的缩放比例,并使用相同的参数执行您自己的手动缩放。
  • 而且 sklearn 提供了更通用的基于类的缩放器,您可以保存并重复使用以供以后缩放。您使用的便捷功能不包含所需的信息。

标签: python scikit-learn keras


【解决方案1】:

通常的做法是保存一个scale 对象,正如您可能读到的here

以下是保存 scale 对象的方法:

from sklearn.externals import joblib
joblib.dump(scale, 'filename.pkl') 

您可以通过以下方式重新加载它:

scale = joblib.load('filename.pkl') 

在预测新数据时 - 最好重新加载缩放器 - 相应地缩放数据,然后使用您的模型。您甚至可以创建一个新类,并像 keras.model 一样保存并保存缩放器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2015-04-17
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多