I want to create a regression ANN model with Gekko. I made this model using tf_Keras, and it works very well. Unfortunately, it is not possible to convert the Keras model to a Gekko amp model. Therefore, I need to make it using the Gekko Brain class. However, it fails to find a solution.
Here is my dataset: ss10_1k_converted.csv
Here is my model in Gekko:
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)
Here is the error:
EXIT: Restoration Failed!
An error occured.
The error code is -2
---------------------------------------------------
Solver : IPOPT (v3.12)
Solution time : 179.147199999999 sec
Objective : 2064584.02728447
Unsuccessful with error code 0
---------------------------------------------------
Creating file: infeasibilities.txt
@error: Solution Not Found
complete error --> link
Please let me know what the problem is.
Thank you
There is a way to import models from TensorFlow directly into Gekko. Here is an example from the Gekko documentation:
from gekko import GEKKO
x = m.Var(.0,lb = 0,ub=1)
y = Gekko_NN_TF(model,mma,m,n_output = 1).predict([x])
m.Obj(y)
m.solve(disp=False)
print('solution:',y.value[0])
print('x:',x.value[0])
print('Gekko Solvetime:',m.options.SOLVETIME,'s')
If you do want to fit the Neural Network with Gekko, it is always better to scale the data. This doesn't change the solution, but helps the Neural Network if the data is scaled with a standard scaler (mean=0, stdev=1).
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from gekko import brain
# load dataset
df = pd.read_csv("ss10_1k_converted.csv")
# Initialize the StandardScaler
s = StandardScaler()
# split data for train and test
train = df.sample(frac=0.8, random_state=200)
test = df.drop(train.index)
# scale train data
train_s = s.fit_transform(train)
train_s = pd.DataFrame(train_s,columns=train.columns)
# Preparing training data
train_x = train_s[['D', 'V']].to_numpy()
train_x = np.transpose(train_x)
train_y = train_s['F'].to_numpy()
train_y = np.transpose(train_y).reshape(1, -1)
# scale test data
test_s = s.transform(test)
test_s = pd.DataFrame(test_s,columns=test.columns)
# Preparing test data
test_x = test_s[['D', 'V']].to_numpy()
test_y = test_s['F'].to_numpy().reshape(1, -1)
# neural network
b = brain.Brain()
b.input_layer(2)
b.layer(relu=61)
b.output_layer(1)
b.learn(train_x, train_y, obj=2)
Tested with the first 300 data rows:
D,V,F
0.0039933,0.083865,-64.83
0.004411,0.011882,-65.2739
0.0046267,-0.047719,-65.7733
0.0043474,0.032426,-67.1328
0.0046642,0.0026268,-66.7721
0.004506,-0.019885,-66.7998
0.0042449,0.0027718,-66.0785
0.0046068,-0.004274,-64.9826
0.0040353,-0.015186,-64.8578
0.0040928,0.0061156,-65.0936
0.004671,-0.007791,-65.912
0.004279,-0.014973,-66.3976
0.0044212,0.026233,-67.0634
0.0046039,-0.0026849,-66.5501
0.0041202,-0.0067733,-65.8565
0.0043672,0.012628,-65.3988
0.004455,-0.0044196,-64.3723
0.0040499,0.0075972,-65.0242
0.0045626,-7.75E-05,-65.6485
0.0044811,-0.0017835,-66.2727
0.0043505,0.0099326,-67.8957
0.0047254,0.0031688,-66.4947
0.004119,-0.0035763,-66.2588
0.0043387,-0.0021411,-65.8011
0.0046139,-0.0041471,-64.4139
0.0041006,-0.015224,-64.8855
0.0045054,0.016978,-65.2878
0.0044468,-0.01442,-65.8565
0.0042841,-0.0033144,-67.0357
0.0044818,0.017859,-66.4947
0.0043907,-0.012453,-66.7582
0.004108,0.022928,-66.0646
0.0045609,0.0015028,-65.1907
0.0043863,-0.0077244,-65.052
0.0043062,0.014014,-64.9271
0.0048137,-0.0020048,-66.0369
0.0043082,-0.0070927,-66.4947
0.0043583,0.0067367,-67.2576
0.0046149,-0.013683,-66.6611
0.0040759,-0.016978,-66.0508
0.0044474,0.0066973,-65.6069
0.0044941,-0.01849,-64.4139
0.0040872,0.0051854,-64.9688
0.004542,0.0072096,-65.9675
0.0044153,-0.015739,-66.3282
0.0040624,0.0049035,-68.1593
0.0046978,-0.0025099,-66.675
0.0041913,-0.012541,-66.5779
0.0041956,0.011957,-66.1479
0.0045725,0.0023067,-64.1226
0.0040471,-0.0062125,-65.4959
0.0043414,0.026824,-65.0104
0.0046067,-0.0037695,-66.3837
0.0040993,-0.0022286,-67.4518
0.0045984,-0.0097582,-66.9524
0.0046205,-0.0067457,-67.0495
0.0041353,0.01126,-66.786
0.0045369,0.011541,-65.2739
0.0038909,-0.011067,-65.0104
0.0042334,0.01567,-65.4681
0.0047868,0.0051842,-66.2866
0.004284,-0.006591,-66.8137
0.0044214,0.018015,-67.2299
0.0048712,-0.018352,-66.994
0.0042182,-0.015794,-66.0369
0.0044314,0.0070755,-65.8843
0.0041792,-0.0040999,-64.7468
0.0039398,-0.0083723,-65.2462
0.0045341,-0.0067345,-66.134
0.0043972,-0.017462,-66.4669
0.0043558,0.0091193,-68.7696
0.0047372,0.0067633,-66.6334
0.0041105,-0.003295,-66.8137
0.004152,0.0062506,-65.6207
0.0043251,-0.0089543,-64.4139
0.004048,-0.0089443,-65.482
0.0044814,0.021243,-65.371
0.0044972,0.0062206,-66.1895
0.0042125,-0.0060468,-67.4657
0.0045941,-0.001696,-67.0911
0.0044504,-0.015574,-67.3131
0.0042516,0.010873,-65.9537
0.0042283,0.00069826,-65.3294
0.0040209,-0.0075884,-65.2184
0.0042322,0.017588,-65.0797
0.0046712,-0.019778,-66.6334
0.0042237,0.0066664,-66.3421
0.0044727,0.028501,-67.4796
0.0047318,-0.0079854,-67.1328
0.0039351,0.0094957,-66.1617
0.004335,0.022909,-65.9398
0.0044769,-0.0043703,-64.4555
0.0041044,-0.001986,-65.3294
0.0048231,0.023936,-66.0924
0.0045902,0.0015897,-66.5918
0.0044028,0.01097,-68.3257
0.0047,0.0097195,-66.6195
0.0043181,-0.023635,-66.8831
0.0043604,-0.007966,-65.9537
0.0046524,-0.0089459,-64.5249
0.0042599,0.0021704,-65.4543
0.0044449,0.0049516,-65.5098
0.0044628,-0.0078797,-66.4253
0.0042596,-0.0047872,-67.5212
0.0047347,0.01064,-66.8137
0.0043973,-0.010622,-67.4102
0.0042344,0.021881,-66.3976
0.0045758,0.0062213,-65.4127
0.0044302,-0.015902,-65.0797
0.004275,0.011271,-65.2323
0.0048129,-0.0094669,-66.5363
0.0043592,-0.0073374,-66.6611
0.0044803,0.0047882,-67.7986
0.0045777,-0.0046428,-66.7305
0.0040829,-0.0091087,-66.1617
0.0044584,0.003626,-65.9398
0.0045068,-0.0059609,-64.5526
0.0042007,0.013363,-65.4127
0.0046671,-0.0036145,-66.0785
0.0044172,-0.019604,-66.994
0.0043849,0.0069483,-68.2425
0.0047915,-0.018207,-66.6611
0.0040251,-0.011774,-66.6611
0.0041447,0.0042927,-65.7456
0.004618,-0.019381,-64.5249
0.0039094,-0.0062988,-65.4127
0.0044787,0.024759,-65.4681
0.0044859,-0.0035376,-66.6195
0.0040748,-0.0071321,-67.4379
0.0046907,0.016193,-66.9663
0.0044212,-0.0068536,-67.2021
0.0040881,0.012219,-65.9675
0.0045039,0.0073159,-65.6346
0.0041685,-0.012811,-65.3572
0.0043691,0.01791,-65.6762
0.0046814,-0.0047478,-66.3559
0.0041919,-0.0095948,-66.6889
0.0044857,0.013557,-67.6044
0.0047077,-0.017045,-66.9524
0.0040122,-0.013703,-66.453
0.0043503,0.011901,-65.6901
0.0043854,-0.0091003,-64.5803
0.0040964,-0.0030619,-65.3433
0.0044621,0.010922,-66.2588
0.0043823,-0.015234,-66.7721
0.0043401,0.01006,-68.298
0.0046588,-0.014118,-66.8969
0.0041869,-0.0081592,-66.8969
0.0041066,-0.0032463,-65.8565
0.0045463,-0.009837,-64.5942
0.0038705,-0.016649,-65.4265
0.0043316,0.0051654,-65.704
0.0043303,0.00058075,-66.6195
0.0041827,-0.0077244,-67.5905
0.0043924,0.026038,-67.1744
0.0042696,-0.0022192,-67.3825
0.0041159,0.01319,-66.453
0.0044228,0.0031794,-65.371
0.0042871,0.00028224,-65.0381
0.0042961,0.020099,-65.4959
0.0045414,-0.0034207,-66.3421
0.0042336,-0.020485,-66.8553
0.0043969,-0.012384,-67.4934
0.0045912,-0.015408,-67.0773
0.0040612,0.0043115,-66.3559
0.004095,0.007946,-65.7317
0.0040889,-0.003616,-64.5942
0.0040495,0.002248,-65.3156
0.0046104,-0.0010946,-66.3005
0.0043607,0.014525,-66.8692
0.004339,0.022639,-68.4367
0.0046271,0.00042635,-66.8692
0.0040437,-0.01568,-66.7721
0.0043274,0.014712,-65.9953
0.0044512,-0.001676,-64.6497
0.0040564,0.0066864,-65.5375
0.0043595,0.027658,-65.5375
0.0045961,-0.016929,-66.1895
0.0043122,0.010872,-67.4796
0.0047341,0.011687,-67.1466
0.0044862,-0.0031194,-67.1744
0.0040565,0.0017347,-66.2588
0.0046251,-0.010573,-65.1491
0.0042434,-0.022105,-65.2739
0.0043096,0.0079566,-65.6207
0.0046239,-0.012723,-66.2588
0.004143,-0.020797,-66.675
0.0043804,0.007956,-67.0079
0.0046135,-0.0091693,-66.9663
0.003853,0.0038752,-66.1479
0.0042924,0.033501,-65.6485
0.0043707,-0.0085086,-64.5526
0.0041629,-0.004419,-64.9965
0.0046859,0.01378,-66.2727
0.0046791,-0.0082854,-66.5085
0.0042443,0.013296,-68.0483
0.0045428,-0.014748,-66.7305
0.0040734,-0.021863,-66.4253
0.0041598,-0.010524,-65.9537
0.0045834,-0.0075484,-64.3168
0.0039269,0.0030525,-65.1907
0.0043361,0.017656,-65.5236
0.0045107,-0.00312,-66.1479
0.0041235,-0.004234,-67.6044
0.0045916,0.01156,-66.6056
0.0043559,-0.0093513,-67.0357
0.0041099,0.014507,-66.134
0.0045156,0.0071321,-65.1768
0.0041119,-0.003837,-65.3433
0.0041865,0.014789,-65.0104
0.0047428,-0.0051173,-66.2866
0.0042376,-0.021698,-66.4392
0.0045302,0.0053204,-67.0357
0.0045926,-0.015031,-66.8969
0.004028,-0.0058731,-65.9537
0.0041685,0.0039933,-65.6623
0.004197,-0.014634,-64.4416
0.003946,0.0090512,-65.1352
0.0046488,0.0042834,-66.1895
0.0043015,0.0097195,-66.3698
0.0042961,0.0282,-68.1593
0.0047374,0.01752,-66.6056
0.0040965,-0.0067645,-66.453
0.004324,0.016571,-65.8011
0.0046482,-0.012066,-64.0255
0.0042263,-0.0074715,-65.2601
0.0045406,0.0093031,-65.5098
0.0045666,-0.015834,-66.1062
0.004103,-0.012898,-67.5212
0.0046178,-0.0030325,-66.6334
0.0042454,-0.020021,-67.0218
0.0040706,0.013268,-65.9814
0.0044418,0.0070652,-65.2184
0.0041778,-0.021369,-65.2046
0.0042203,0.026001,-64.9965
0.0047789,0.0012015,-66.1062
0.0042161,-0.00043788,-66.5085
0.0042759,0.01094,-67.0357
0.0046614,-0.012782,-66.786
0.0040899,-0.0026661,-65.8565
0.0044348,0.0026455,-65.593
0.0043528,0.0050292,-64.2752
0.0040157,-0.0049422,-64.9271
0.0047363,0.018034,-65.912
0.0042584,-0.01004,-66.2033
0.0043564,-0.00097832,-67.9096
0.0045823,-0.010078,-66.3143
0.0043784,-0.025371,-66.3005
0.0042742,0.023956,-65.704
0.0043372,-0.0097389,-63.97
0.0038545,0.0087318,-65.052
0.0043303,0.0017541,-65.0242
0.0046417,0.00086268,-66.0508
0.0042006,0.015011,-67.2576
0.004722,0.013285,-66.453
0.0044065,-0.0017341,-66.786
0.004288,-0.0038564,-65.7178
0.0045773,0.0016372,-65.1075
0.0040671,-0.017337,-64.9688
0.0043026,0.020536,-64.9133
0.00458,-0.016696,-66.0091
0.0042268,-0.027163,-66.0785
0.0044446,0.014682,-67.0357
0.004735,-0.028151,-66.3143
0.0040209,0.009797,-65.7594
0.0041427,0.0013096,-65.3156
0.004302,-0.017008,-64.0948
0.0038522,-0.003682,-64.7191
0.0047367,0.018354,-66.134
0.0042477,-0.0030631,-65.704
0.0041725,0.00010627,-67.9928
0.0046761,0.0081098,-66.7166
0.0043145,-0.020981,-65.8149
0.0040937,0.028742,-65.2601
0.0043037,0.0014828,-64.6358
0.0039819,-0.013111,-64.7607
0.004401,0.0028881,-64.9549
0.0047076,0.0030719,-66.6195
0.0041962,0.021863,-66.7443
0.0044663,0.0021904,-66.5085
0.0043607,0.004399,-67.5212
0.0041429,0.0039252,-65.3294
0.0046535,0.0034401,-64.9549
0.004017,-0.0025199,-64.7191
0.0044714,0.025264,-64.8162
0.0047704,-0.0057655,-66.0924
0.0042513,-0.01883,-66.675
0.004426,0.019915,-66.7998
0.004765,-0.019584,-66.3421
0.0040506,-0.012056,-66.4392
0.0043522,0.0013278,-65.3433
0.0043356,-0.0074818,-64.2335
0.0041581,0.0020642,-64.7607
0.0045775,0.019129,-65.9814
0.0042725,-0.0068808,-66.4253
0.0043063,0.0038183,-67.8957
0.004798,-0.021794,-66.3559
0.0043567,-0.012045,-66.3005
0.0042421,0.015245,-65.7872
0.0043967,-0.017288,-63.8174
It didn't terminate to optimality after 500 iterations, but it didn't fail like it did before. Perhaps setting m.options.MAX_ITER
to a reasonable level and reporting the solution with m.solve(debug=0)
can be one way to terminate early without converging to optimality.
Overall recommendation is to import the model from Keras / TensorFlow instead of refitting it with the gekko brain
function.