I am performing hyperparameter tuning on a ANN model in Python. While I have successfully received the optimized parameters, the final model fit isn’t executing.
Parameters optimization:
params_reg=reg_bo.max['params']
learning_rate=params_reg['learning_rate']
activationL=['relu', 'sigmoid', 'softplus', 'softsign', 'tanh', 'selu', 'elu', 'exponential', LeakyReLU,'relu']
params_reg['activation'] = activationL[round(params_reg['activation'])]
params_reg['batch_size']=round(params_reg['batch_size'])
params_reg['epochs']=round(params_reg['epochs'])
params_reg['layer1']=round(params_reg['layer1'])
params_reg['layer2']=round(params_reg['layer2'])
params_reg['neurons']=round(params_reg['neurons'])
optimizerL= ['SGD', 'Adam', 'RMSprop', 'Adadelta', 'Adagrad', 'Adamax', 'Nadam', 'Ftrl', 'SGD']
optimizerD= {'Adam':Adam(learning_rate=learning_rate), 'SGD': SGD(learning_rate=learning_rate), 'RMSprop': RMSprop(learning_rate=learning_rate), 'Adadelta':Adadelta(learning_rate=learning_rate), 'Adagrad': Adagrad(learning_rate=learning_rate), 'Adamax': Adamax(learning_rate=learning_rate), 'Nadam': Nadam(learning_rate=learning_rate), 'Ftrl': Ftrl(learning_rate=learning_rate)}
params_reg['optimizer']=optimizerD[optimizerL[round(params_reg['optimizer'])]]
params_reg
OUTPUT:
{'activation': 'exponential',
'batch_size': 89,
'dropout': 0.8286376417073243,
'dropout_rate': 0.23450483751217865,
'epochs': 84,
'layer1': 2,
'layer2': 3,
'learning_rate': 0.36267745617152103,
'neurons': 125,
'normalization': 0.9051880107077904,
'optimizer': <keras.src.optimizers.sgd.SGD at 0x225e44c9dd0>}
FINAL MODEL:
def predict_roi():
reg_roi=Sequential()
reg_roi.add(Dense(params_reg['neurons'], input_dim=2, activation=params_reg['activation']))
if params_reg['normalization']>0.5:
reg_roi.add(BatchNormalization())
for i in range(params_reg['layer1']):
reg_roi.add(Dense(params_reg['neurons'], activation=params_reg['activation']))
if params_reg['dropout']>0.5:
reg_roi.add(Dropout(params_reg['dropout_rate'], seed=123))
for i in range(params_reg['layer2']):
reg_roi.add(Dense(params_reg['neurons'], activation=params_reg['activation']))
reg_roi(Dense(1, activation='sigmoid'))
reg_roi.compile(loss= 'mean_squared_error', optimizer=optimizer, metrics=['mean_absolute_error'])
return reg_roi
es=EarlyStopping(monitor='accuracy', mode='max', verbose=0, patience=20)
reg_roi=KerasRegressor(build_fn=predict_roi, epochs=84, batch_size=89, verbose=0)
reg_roi.fit(X_train, Y_train, validation_data=(X_val, Y_val), verbose =1)
ERROR:
ValueError: Only input tensors may be passed as positional arguments. The following argument value should be passed as a keyword argument: <Dense name=dense_744, built=False> (of type <class 'keras.src.layers.core.dense.Dense'>)
I have tried upgrading keras version as was mentioned in a different post to the latest version (3.5), however this error persists.
All suggestions are welcome.
2