深度学习实现交叉验证(图像、信号处理)

我们在写文章时,总是怕自己结果不能得到足够的可信度,及时设定了seed但也经常复现失败,于是我们会采用交叉验证的方法,是自己的结果可信度更高,一般以5折十折居多,这篇文章主要介绍实现的方法,以图像处理、信号识别等深度学习为基础背景进行介绍。

首先,像之前一样,读取出训练集,测试集并进行预处理(按自己的项目)

之后,融合训练集、测试集,以便后续重新划分,进行交叉验证。

X = np.append(train_set.X,test_set.X,axis=0)  # 训练集和测试集拼接起来
y = np.append(train_set.y,test_set.y,axis=0)  # 标签拼接

在之后采用指标寻址的方式,只需划分指标位置,即可。

i = 1
KF = KFold(n_splits=6, shuffle=True, random_state=100)
for train_index, test_index in KF.split(dataset.X):np.save("F:/脑电信号分类所用资料/SSVEP/SSVEP_Classify/k_fold_index/subject_{}/train_index_{}".format(subject_id, i), train_index)np.save("F:/脑电信号分类所用资料/SSVEP/SSVEP_Classify/k_fold_index/subject_{}/test_index_{}".format(subject_id, i), test_index)i=i+1

这是6折的例子,shuffle代表是否打乱数据进行划分,random_state是用于复现划分的,类似于seed

之后循环保存到指定位置(程序段是一个例子,采用时按照自己的项目地址更改)

划分结束后,为检查是否划分完成或者划分是否正确,可以进行读取。

index = [1, 2, 3, 4, 5, 6]
for i in index:   print('*' * 25, '第', i, '折', '*' * 25)train_index = np.load("F:/脑电信号分类所用资料/SSVEP/SSVEP_Classify/k_fold_index/subject_{}/train_index_{}.npy".format(subject_id, i))test_index = np.load("F:/脑电信号分类所用资料/SSVEP/SSVEP_Classify/k_fold_index/subject_{}/test_index_{}.npy".format(subject_id, i))print("train_index:{},test_index:{}".format(train_index, test_index))

之后,进行按刚才划分的指标分配数据

train_set_X = dataset.X[train_index]  # 训练集
train_set_y = dataset.y[train_index]  # 测试集
test_set_X = dataset.X[test_index]  # 训练集label
test_set_y = dataset.y[test_index]  # 测试集label

后续工作设定在以循环形式进行的,比如我是6折,那就设为

index = [1, 2, 3, 4, 5, 6]
for i in index:

之后进行和之前未使用交叉验证时一样的运行工作


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部