基于PyGAD遗传算法训练的Keras模型如何实现新样本预测
PyGAD训练Keras回归模型后的独立推理实现方法
按照以下步骤操作即可,全程不需要将待预测样本混入训练集,不会造成数据泄露:
- 提取最优解对应的模型权重
训练流程全部结束后,不需要重新训练或修改训练逻辑,直接从PyGAD训练实例中取出搜索到的最优权重向量,整形为Keras模型匹配的权重矩阵后加载到模型中即可:import numpy as np # 注意替换成你自己代码里的实例名:ga_instance是你跑完训练的PyGAD对象,keras_model是你构建的初始Keras回归模型 best_weights_vector, best_fit, _ = ga_instance.best_solution() # 自动将一维权重向量转换为模型各层对应的权重形状,不需要手动计算每层维度 keras_model.set_weights( ga_instance.model_weights_as_matrix( model=keras_model, weights_vector=best_weights_vector ) ) - 切换模型为推理状态
权重加载完成后,关闭模型的训练属性,避免Dropout、批量归一化层在推理时使用训练逻辑计算,这一步不会改动任何权重:keras_model.trainable = False - 传入新样本执行预测
你准备的待预测输入numpy.array([[0.9, 0.7, 0.85]])形状为(1,3),完全匹配模型要求的3维输入格式,直接调用预测接口即可得到结果:new_input = np.array([[0.9, 0.7, 0.85]]) prediction = keras_model.predict(new_input, verbose=0) print(prediction)
避坑提示:不要在推理前重新执行模型
fit()训练、不要将待预测样本拼接进训练数据集、不要复用训练阶段的适应度计算函数做预测——适应度函数是训练过程中给遗传算法迭代打分用的,推理仅需要加载最优权重的模型做前向传播即可,待预测样本全程不参与权重更新,不存在数据泄露问题。
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

