爲了在調節網絡參數(好比訓練的輪數)的同時對網絡進行評估,你能夠將數據劃分爲訓練集和驗證集。但因爲數據點不多,驗證集會很是小(好比大約100 個樣本)。所以,驗證分數可能會有很大波動,這取決於你所選擇的驗證集和訓練集。也就是說,驗證集的劃分方式可能會形成驗證分數上有很大的方差,這樣就沒法對模型進行可靠的評估。
在這種狀況下,最佳作法是使用 K 折交叉驗證。這種方法將可用數據劃分爲 K個分區(K 一般取 4 或 5),實例化 K 個相同的模型,將每一個模型在 K-1 個分區上訓練,並在剩下的一個分區上進行評估。模型的驗證分數等於 K 個驗證分數的平均值。
網絡
一個可能的程序示例:app
k = 4 #劃分紅k塊 num_validation_samples = len(data) // k np.random.shuffle(data) validation_scores = [] for fold in range(k): validation_data = data[num_validation_samples * fold : num_validation_samples * (fold + 1)] training_data = data[:num_validation_samples * fold] + data[num_validation_samples * (fold + 1):] model = get_model() model.train(training_data) validation_score = model.evaluate(validation_data) validation_scores.append(validation_score) validation_score = np.average(validation_scores) model = get_model() model.train(data) test_score = model.evaluate(test_data)