![](/img/trans.png)
[英]Build CNN model with keras for uneven training and testing data of folders of images
[英]Splitting data to training, testing and valuation when making Keras model
在制作和評估 Keras 機器學習模型時,我對拆分數據集有點困惑。 假設我有 1000 行的數據集。
features = df.iloc[:,:-1]
results = df.iloc[:,-1]
現在我想將這些數據分成訓練和測試(33% 的數據用於測試,67% 用於訓練):
x_train, X_test, y_train, y_test = train_test_split(features, results, test_size=0.33)
我在互聯網上讀到將數據擬合到 model 應該如下所示:
history = model.fit(features, results, validation_split = 0.2, epochs = 10, batch_size=50)
因此,我將完整的數據(特征和結果)擬合到我的 model 中,並從該數據中使用 20% 的數據進行驗證: validation_split = 0.2
。 所以基本上,我的 model 將使用 80% 的數據進行訓練,並在 20% 的數據上進行測試。
因此,當我需要評估 model 時,就會出現混亂:
score = model.evaluate(x_test, y_test, batch_size=50)
這個對嗎? 我的意思是,我為什么要把數據分成訓練和測試,x_train 和 y_train go 在哪里?
您能否向我解釋一下創建 model 的正確步驟順序是什么?
通常,在訓練時( model. fit
),您有兩組:一組用於訓練集,另一組用於驗證/調整/開發集。 使用訓練集,您訓練 model,使用驗證集,您需要找到最佳的超參數集。 完成后,您可以使用看不見的數據集測試 model - 與訓練或驗證集不同,該數據集完全隱藏在 model 之外。
現在,當你使用
X_train, X_test, y_train, y_test = train_test_split(features, results, test_size=0.33)
這樣,您將features
和results
分成33%
的數據用於測試, 67%
用於訓練。 現在,你可以做兩件事
X_test
和y_test
作為model.fit(...)
中的驗證集。或者,model. predict(...)
model. predict(...)
因此,如果您選擇這些測試集作為驗證集(編號 1 ),您將執行以下操作:
model.fit(x=X_train, y=y_trian,
validation_data = (X_test, y_test), ...)
在訓練日志中,您將獲得驗證結果以及訓練分數。 如果您稍后計算model.evaluate(X_test, y_test)
驗證結果應該相同。
現在,如果您選擇這些測試集作為最終預測或最終評估集(編號 2 ),那么您需要重新制作驗證集或使用validation_split
參數,如下所示:
model.fit(x=X_train, y=y_trian,
validation_split = 0.2, ...)
Keras
API 將采用.2
% 的訓練數據( X_train
和y_train
)並將其用於驗證。 最后,對於您的 model 的最終評估,您可以執行以下操作:
y_pred = model.predict(x_test, batch_size=50)
現在,您可以將y_test
和y_pred
與一些相關指標進行比較。
通常,您希望在 fit 方法中使用已拆分為 arguments 的 X_train、y_train 數據。 所以它看起來像:
history = model.fit(X_train, y_train, batch_size=50)
雖然在將數據放入 fit 方法之前不拆分數據並添加 validation_split arguments 也可以,但請注意參考 keras 文檔,validation_data 和 validation_split ZDBC11CAA5BDA99F77E6FB4DABD882E7 以確保按預期拆分它們。
Keras 文檔: https://keras.rstudio.com/reference/fit.ZFC35FDC70D5FC69D269883A8EZC
我在互聯網上讀到將數據擬合到 model 應該如下所示:
這意味着您需要擬合特征和標簽。 您已經將它們拆分為x_train
和y_train
。 所以你的合身應該是這樣的:
history = model.fit(x_train, y_train, validation_split = 0.2, epochs = 10, batch_size=50)
因此,當我需要評估 model 時,就會出現混亂:
score = model.evaluate(x_test, y_test, batch_size=50) --> 這是正確的嗎?
沒錯,您通過使用測試功能和相應的標簽來評估 model。 此外,如果您只想獲得例如預測標簽,您可以使用:
y_hat = model.predict(X_test)
然后您可以將y_hat
與y_test
進行比較,即得到一個混淆矩陣等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.