回归问题中的K折验证

  回归问题中,为了调节网络参数(如训练轮数)的同时对网络进行评估,一般将数据集分为训练集和验证集。但有时由于数据集比较小,验证集会非常小。因此会导致验证结果会有很大波动,无法对模型进行可靠的评估,此时,最佳的做法就是使用K折交叉验证。

  K折交叉验证的思路就是将数据集划分为K个分区,通常K=4或K=5,创建K个相同的模型,将每个模型在K-1个分区上训练,并在剩下的一个分区进行验证评估,最后模型的验证分数等于K个验证分数的平均值。代码实现如下:

  

import numpy as np
#输入K值(默认5折)
#训练轮数
#训练数据
#训练目标数据(标签)
def
k_fold(k=5, val_samples_num, num_epchos=100,train_data, train_target):
  #训练集均分为K份   val_samples_num = len(train_data) // k   all_scores = []   for i in range(k):   print('now is %d fold' % i)   val_data = train_data[i*val_samples_num:(i+1)*val_samples_num]   val_targets = train_target[i*val_samples_num:(i+1)*val_samples_num]   partial_train_data = np.concatenate([train_data[:i*val_samples_num], train_data[(i+1)*val_samples_num :]], axis=0)   partial_train_targets = np.concatenate([train_target[:i*val_samples_num], train_target[(i+1)*val_samples_num :]], axis=0)   model = build_model()   model.fit(partial_train_data, partial_train_targets, epochs=num_epchos, batch_size=1, verbose=0)   val_mse, val_mae = model.evaluate(val_data, val_targets, verbose=0)   all_scores.append(val_mae)   mae_mean = np.mean(all_scores)   print(mae_mean)

可以通过画出每轮mae的走势图来观察训练情况,判断是否有过拟合,同时找到一个相对好的轮数值。

posted @ 2020-06-11 11:03  雲淡風轻2020  阅读(658)  评论(0)    收藏  举报