I want to do grid search for my model, and here my model shown below.
def model_lstm(time_steps=24, n_features=40,
optimizer = tf.keras.optimizers.Adam,
learning_rate = 0.001,
dropout = 0.5,
n_units_LSTM = 256,
n_units_1 = 200):
activation2 = 'relu'
model = Sequential()
model.add(LSTM(units=n_units_LSTM, input_shape=(time_steps, n_features)))
model.add(Dropout(dropout))
model.add(Dense(units=n_units_1, activation=activation2))
model.add(Dense(units=n_units_1, activation=activation2))
model.add(Dense(units=n_units_1, activation=activation2))
model.add(Dense(units=n_units_1, activation=activation2))
model.add(Dense(units=n_units_1, activation=activation2))
model.add(Dense(1, activation='sigmoid'))
optimizer = optimizer(learning_rate=learning_rate)
model.compile(loss='binary_crossentropy',
optimizer=optimizer,
metrics = ['accuracy'])
print(model.summary())
return model
there are 4 parameters that i want to grid, learning rate, n_unit_LSTM, n_units_1, and dropout. i want to get the same value of each dense layer. so i add variable named n_units_1.
def grid_search(data, metode):
keras.backend.clear_session()
x_train, y_train = sequence_data(data)
params = {
'learning_rate' : [0.01, 0.001, 0.0001],
'n_units_LSTM' : [64,128,256],
'n_units_1' : [50, 100, 150, 200, 250, 300],
'dropout' : [0.1, 0.2, 0.25, 0.5]
}
scorers = {
'accuracy_score' : make_scorer(accuracy_score)
}
model = KerasClassifier(build_fn=model_lstm, verbose=0)
cv = cross_validate(5)
start = time.time()
grid = GridSearchCV(estimator = model,
param_grid = params,
n_jobs = -1,
verbose = 1,
cv = cv,
scoring = scorers,
refit = 'accuracy_score')
tf.random.set_seed(123)
grid.fit(x_train, y_train)
end = time.time()
runtime = end-start
result = grid.best_params_
results = grid.cv_results_
print('-----------------------------------------')
print(f'Best Parameter : {result}')
print(f'Runtime : {runtime}')
print('-----------------------------------------')
return grid
and when i run my grid, i got an error.
A task has failed to un-serialize. Please ensure that the arguments of the function are all picklable.