为了在调节网络参数(好比训练的轮数)的同时对网络进行评估,你能够将数据划分为训练集和验证集。但因为数据点不多,验证集会很是小(好比大约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)