如何在Keras与Python环境下记录训练测试数据索引用于训练后分析
实现方案
1. 准备原始样本标识数组
先准备和原始输入数组ins长度完全一致的时间戳数组,每个位置的元素对应ins[i]的样本标识:
# 可根据实际场景从文件加载或自行生成,形状为 (100,),和ins的样本数对齐 timestamps = np.load('timestamps.npy')
2. 拆分数据集时同步拆分标识数组
sklearn的train_test_split支持传入多个同长度数组,会按照完全相同的随机规则拆分,保证样本、标签、标识的索引一一对应:
# 第一次拆分:拆分出测试集 ins_train, ins_test, outs_train, outs_test, timestamps_train, timestamps_test = train_test_split( ins, outs, timestamps, test_size=0.25, random_state=3 ) # 第二次拆分:拆分出验证集 ins_train, ins_val, outs_train, outs_val, timestamps_train, timestamps_val = train_test_split( ins_train, outs_train, timestamps_train, test_size=0.2, random_state=2 )
3. 训练流程无需修改
你现有的生成器、模型训练逻辑完全不用调整,训练过程不需要用到时间戳信息,生成器仅需要给模型投喂输入和标签即可,训练时的随机采样逻辑不会影响后续的样本对齐。
4. 标识存入结果字典
你后续调用model.predict时是按输入数组的顺序依次推理的,输出的预测结果索引和对应标识数组的索引完全一一对应,直接存入结果字典即可:
results['training_timestamps'] = timestamps_train results['validation_timestamps'] = timestamps_val results['testing_timestamps'] = timestamps_test
补充说明:如果后续需要用生成器做大数据集的推理(无法一次性加载全量数据进内存),可以修改生成器同时返回对应样本的索引/标识,推理时同步收集标识即可,当前训练场景不需要做额外调整。
内容的提问来源于stack exchange,提问作者McM
相关产品推荐
相关产品推荐

