簡體   English   中英

神經網絡的縮放數據

[英]Scaling data for neural network

我在 keras 中使用順序模型進行分類。

給定數據:

x_train = np.random.random((5000, 20))
y_train = keras.utils.to_categorical(np.random.randint(10, size=(5000, 1)), num_classes=10)
x_test = np.random.random((500, 20))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(500, 1)), num_classes=10)

特征縮放很重要:

scaler = StandardScaler()
scaler.fit(x_train) 
x_train = scaler.transform(x_train) 
x_test = scaler.transform(x_test) 

模型

model = Sequential()
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))    

model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

model.fit(x_train, y_train,
          epochs=100,
          batch_size=32)

要預測的數據

z = np.random.random((9999000, 20)) 

我應該縮放這些數據嗎? 如何縮放這些數據?

predictions = model.predict_classes(z)

如您所見,與要預測的數據 ( z ) 相比,訓練和測試樣本只是少數。 使用配備x_train的縮放器重新縮放x_test ,似乎沒問題。 但是,使用僅配備 5000 個樣本的相同縮放器來重新縮放z (9999000 個樣本),似乎不太好。 深度學習領域有沒有解決這個問題的最佳實踐?

對於對特征縮放鏈接不敏感的分類器,隨機森林沒有這個問題。 然而,對於深度學習,這個問題是存在的。

此處顯示的訓練數據僅用於示例目的。 在實際問題中,訓練數據並非來自相同(均勻)的概率分布。 很難標記數據,並且訓練數據對易於標記的人有偏見。 僅標記更容易標記的樣品。

但是,使用僅配備 5000 個樣本的相同縮放器來重新縮放z (9999000 個樣本),似乎不太好。

不清楚你為什么這么認為。 這正是標准做法,即使用適合您的訓練數據的縮放器,正如您對測試數據所做的那樣:

z_scaled = scaler.transform(z) 
predictions = model.predict_classes(z_scaled)

樣本數量(500 或 10^6)在這里沒有任何區別; 重要的是所有這些數據( xz )都來自相同的概率分布。 在實踐中(對於未來可能仍然存在的數據),這只是假設(並且模型部署后要注意的事情之一就是這個假設是否不成立,或者在一段時間后不再正確)。 但尤其是在這里,由於您的模擬數據來自完全相同(均勻)的概率分布,這完全是正確的做法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM