实
现
多
折
交
叉
验
证
实现多折交叉验证
实现多折交叉验证
import numpy as np
import numpy as np
from sklearn.model_selection import KFold
X = np.array([[0, 0], [1, 1], [2, 2], [3, 3],[4, 4], [5, 5]])
kf = KFold(n_splits=5)
for train_index, test_index in kf.split(X):
print('train_index:', train_index, 'test_index:', test_index)
train_X = X[train_index]
test_X= X[test_index]
print("train_X:",train_X)
print("test_X:",test_X)
正
经
使
用
版
正经使用版
正经使用版
import numpy as np
import os
from sklearn.model_selection import KFold
import os.path as osp
def read_file(path): # 图片的完整路径
"""从文件夹中读取数据"""
files_list = os.listdir(path)
file_path_list = [os.path.join(path, img) for img in files_list]
file_path_list.sort() # 图片路径排序
return file_path_list
def makedir(path):
# 判断路径是否存在
isExists = os.path.exists(path)
if not isExists:
# 如果不存在,则创建目录(多层)
os.makedirs(path)
print('目录:' + path + '创建成功!')
return True
else:
# 如果目录存在则不创建,并提示目录已存在
print('目录:' + path + '已存在!')
return False
def make_flods_index(k_num=5,image_path=r"C:\\Users\\29939\\Desktop\\kaggle_肾小球分割\\train\\image" ,mask_path=r"C:\\Users\\29939\\Desktop\\kaggle_肾小球分割\\train\\label"):
kf = KFold(n_splits=k_num)
X = read_file(image_path)
Y = read_file(mask_path)
for i, (train_index, test_index) in enumerate(kf.split(X)):
print('train_index:', len(train_index), 'test_index:', len(test_index))
# # train_index与test_index为下标
# X = np.array(X)
# train_X = X[train_index]
# test_X = X[test_index]
# print("train_X:", len(train_X))
# print("test_X:", len(test_X))
folds_save_train_image_path = r"./folds/" + str(i) + "_fold/train/image/"
folds_save_train_mask_path = r"./folds/" + str(i) + "_fold/train/mask/"
folds_save_test_image_path = r"./folds/" + str(i) + "_fold/test/image/"
folds_save_test_mask_path = r"./folds/" + str(i) + "_fold/test/mask/"
makedir(folds_save_train_image_path)
makedir(folds_save_train_mask_path)
makedir(folds_save_test_image_path)
makedir(folds_save_test_mask_path)
for j in train_index:
train_image = X[j]
train_mask = Y[j]
#print(os.path.split(train_mask)[1].split(".")[0])
np.save(folds_save_train_image_path + os.path.split(train_image)[1].split(".")[0], train_image)
np.save(folds_save_train_mask_path + os.path.split(train_mask)[1].split(".")[0], train_mask)
for k in test_index:
test_image = X[k]
test_mask = Y[k]
np.save(folds_save_test_image_path + os.path.split(test_image)[1].split(".")[0], test_image)
np.save(folds_save_test_mask_path + os.path.split(test_mask)[1].split(".")[0], test_mask)
for i in range(k_num):
folds_save_train_image_path = r"./folds/" + str(i) + "_fold/train/image/"
folds_save_train_mask_path = r"./folds/" + str(i) + "_fold/train/mask/"
folds_save_test_image_path = r"./folds/" + str(i) + "_fold/test/image/"
folds_save_test_mask_path = r"./folds/" + str(i) + "_fold/test/mask/"
x1 = np.load(folds_save_train_image_path + os.listdir(folds_save_train_image_path)[0])
x2 = np.load(folds_save_train_mask_path + os.listdir(folds_save_train_mask_path)[0])
x3 = np.load(folds_save_test_image_path + os.listdir(folds_save_test_image_path)[0])
x4 = np.load(folds_save_test_mask_path + os.listdir(folds_save_test_mask_path)[0])
print("*********************************")
print("fold_" + str(i))
print("*********************************")
print("train_image:", x1)
print("train_mask:", x2)
print("test_image:", x3)
print("test_mask:", x4)
x1 = np.load(folds_save_train_image_path + os.listdir(folds_save_train_image_path)[1])
x2 = np.load(folds_save_train_mask_path + os.listdir(folds_save_train_mask_path)[1])
x3 = np.load(folds_save_test_image_path + os.listdir(folds_save_test_image_path)[1])
x4 = np.load(folds_save_test_mask_path + os.listdir(folds_save_test_mask_path)[1])
print("*********************************")
print("fold_" + str(i))
print("*********************************")
print("train_image:", x1)
print("train_mask:", x2)
print("test_image:", x3)
print("test_mask:", x4)
if __name__ == "__main__":
make_flods_index(k_num=5,image_path=r"C:\\Users\\29939\\Desktop\\kaggle_肾小球分割\\train\\image" ,mask_path=r"C:\\Users\\29939\\Desktop\\kaggle_肾小球分割\\train\\label")