创建网站步骤,如何自己做淘宝客网站,网页版梦幻西游哪个职业厉害,wordpress 文章多图交叉验证是一种用于评估深度学习模型性能的统计方法。交叉验证是一种重采样方法#xff0c;用于在有限的数据样本上评估深度学习模型#xff0c;可用于分类、回归等任务。交叉验证可以减少过拟合、提供稳健的性能评估、高效利用数据(尤其是在数据量有限的情况下)。 K-Fold Cr…交叉验证是一种用于评估深度学习模型性能的统计方法。交叉验证是一种重采样方法用于在有限的数据样本上评估深度学习模型可用于分类、回归等任务。交叉验证可以减少过拟合、提供稳健的性能评估、高效利用数据(尤其是在数据量有限的情况下)。K-Fold Cross-ValidationK折交叉验证K表示给定数据样本随机要分成的大小相等的组数(折)。训练K次将模型在所有K次迭代中的性能取平均值从而得到模型泛化能力的估计。如下图所示原图来自于 https://www.kaggle.com一般步骤数据集中的每个样本有且仅一次用于测试每个样本均K-1次用于训练1. 随机打乱数据集将数据集分成K折。2. 训练及测试对于每个折使用K-1个折来训练模型使用剩余的折作为测试集来评估模型。3. 汇总结果计算每个折的性能指标并取平均值。K值的选择会影响偏差和方差之间的权衡K的选择通常为5或10没有硬性规定。小数据集适合较大的K值中数据集适合较小的K值。大数据集不建议使用K-Fold。1. 较小的K值使计算速度更快但性能估计的方差更大。2. 较大的K值使方差更小但计算成本更高。以下测试代码为将数据集按照K折交叉验证拆分并计算mean和std用于回归训练中csv文件中为每幅图像对应一个float值def parse_args(): parser argparse.ArgumentParser(descriptionK-Fold Cross-Validation) parser.add_argument(--src_dataset_path, requiredTrue, typestr, helpsource dataset path) parser.add_argument(--src_csv_file, requiredTrue, typestr, helpsource csv file) parser.add_argument(--dst_dataset_path, requiredTrue, typestr, helpthe path of the destination dataset after split) parser.add_argument(--k, typeint, default5, helpnumber fo groups, K-Fold cross validataion) args parser.parse_args() return args def split_k_fold(src_dataset_path, dst_dataset_path, src_csv_file, k): if src_dataset_path is None or not src_dataset_path or not Path(src_dataset_path).is_dir(): raise ValueError(colorama.Fore.RED f{src_dataset_path} is not a directory) if src_csv_file is None or not src_csv_file or not Path(src_csv_file).is_file(): raise ValueError(colorama.Fore.RED f{src_csv_file} is not a file) for i in range(1, k1): path_name dst_dataset_path _ str(i) if Path(path_name).exists(): raise FileExistsError(colorama.Fore.RED fspecified directory already exists: {path_name}) Path(path_name).mkdir(parentsTrue) Path(path_name /train).mkdir(parentsTrue) Path(path_name /val).mkdir(parentsTrue) dataframe pd.read_csv(src_csv_file, headerNone) samples dataframe.values.tolist() if len(samples) 0: raise FileNotFoundError(colorama.Fore.RED fthere is no data in the file: {src_csv_file}) print(fsamples length: {len(samples)}; samples0: {samples[0]}) images [img for img in Path(src_dataset_path).glob(*) if img.is_file()] if len(images) 0: raise FileNotFoundError(colorama.Fore.RED fthere are no matching images in this directory: {src_dataset_path}) print(fimages number: {len(images)}, image0: {images[0]}) if len(samples) ! len(images): raise ValueError(colorama.Fore.RED flength mismatch: samples:{len(samples)}; images:{len(images)}) for i in range(0, len(samples)): if samples[i][2] ! images[i].name: raise ValueError(colorama.Fore.RED fname mismatch: samples{i}:{samples[i][2]}; images{i}:{images[i].name}) total len(samples) numbers list(range(total)) random.shuffle(numbers) fold_size total // k def write_and_copy(index_list, folder, csv_file): with open(csv_file, modew, newline, encodingutf-8) as file: write csv.writer(file) for idx in index_list: write.writerow(samples[idx]) shutil.copy(images[idx], folder) def calculate_mean_std(train_list, txt_file): mean_sum np.zeros(3, dtypenp.float64) std_sum np.zeros(3, dtypenp.float64) for idx in train_list: img cv2.imread(str(images[idx])) if img is None: raise FileNotFoundError(colorama.Fore.RED fimage file does not exist: {images[idx]}) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img img.astype(np.float64) / 255.0 mean_sum img.mean(axis(0, 1)) std_sum img.std(axis(0, 1)) mean mean_sum / len(train_list) std std_sum / len(train_list) with open(txt_file, modew, encodingutf-8) as file: file.write(f--mean {tuple(mean.tolist())} --std {tuple(std.tolist())}) for fold in range(k): val_idx numbers[fold * fold_size : (fold 1) * fold_size] if fold k - 1 else numbers[fold * fold_size :] train_idx [i for i in numbers if i not in val_idx] print(ffold {fold 1}: length val: {len(val_idx)}; train: {len(train_idx)}) write_and_copy(train_idx, dst_dataset_path _ str(fold1) /train, dst_dataset_path _ str(fold1) /train.csv) write_and_copy(val_idx, dst_dataset_path _ str(fold1) /val, dst_dataset_path _ str(fold1) /val.csv) calculate_mean_std(train_idx, dst_dataset_path _ str(fold1) /mean_std.txt) if __name__ __main__: colorama.init(autoresetTrue) args parse_args() split_k_fold(args.src_dataset_path, args.dst_dataset_path, args.src_csv_file, args.k) print(colorama.Fore.GREEN execution completed )执行结果如下图所示GitHubhttps://github.com/fengbingchun/NN_Test