使用Gekko Brain类构建回归ANN模型时无法求解问题排查
Gekko Brain类构建回归ANN模型求解失败排查
问题背景
此前用tf_Keras构建的回归ANN模型效果优异,但无法转换为Gekko AMP模型,改用Gekko的Brain类重构时出现求解失败。
相关信息
数据集
使用ss10_1k_converted.csv数据集,按8:2比例拆分训练集与测试集。
模型代码
import pandas as pd import numpy as np from gekko import brain # load dataset df = pd.read_csv("ss10_1k_converted.csv") # split data for train and test train=df.sample(frac=0.8,random_state=200) test=df.drop(train.index) # Preparing training data train_x = train[['D','V']].to_numpy() train_x = np.transpose(train_x) train_y = train['F'].to_numpy() train_y = np.transpose(train_y).reshape(1,-1) # Preparing test data test_x = test[['D','V']].to_numpy() test_y = test['F'].to_numpy().reshape(1,-1) # neural network b = brain.Brain() b.input_layer(2) b.layer(relu=61) #b.layer(relu=61) b.output_layer(1) b.learn(train_x, train_y, obj=2)
报错信息
EXIT: Restoration Failed!
An error occured.
The error code is -2Solver : IPOPT (v3.12)
Solution time : 179.147199999999 sec
Objective : 2064584.02728447
Unsuccessful with error code 0Creating file: infeasibilities.txt
@error: Solution Not Found
排查方向
- 数据缩放缺失:Gekko优化器对未缩放的数据敏感度高,tf_Keras通常会做归一化/标准化处理,当前代码未对输入输出数据做缩放,导致目标函数值过大(200万+),优化器难以收敛。建议对
train_x、train_y做Min-Max或Z-score缩放,训练完成后再反缩放还原结果。 - 网络结构参数不合理:隐藏层设置61个神经元可能过多,导致优化变量数量激增,IPOPT求解时易陷入数值困境。尝试减少神经元数量(如10-30区间),或在
b.layer()中添加reg参数引入正则化。 - 求解器配置调整:当前使用默认IPOPT配置,可尝试修改求解器参数,比如增大
max_iter迭代次数,或切换为APOPT求解器。在b.learn()中设置disp=True查看详细求解过程,或debug=True生成调试文件定位问题。 - 目标函数适配:
obj=2对应L2损失,若数据波动较大,可尝试切换为obj=1(L1损失),同时检查是否因数据量级问题导致损失函数计算出现数值溢出。
内容的提问来源于stack exchange,提问作者Afshin Salmanpour
相关产品推荐
相关产品推荐

