0

I am trying to optimize the hyperparameters of a simple CNN model using Bayesian optimization, but I have been getting an error that I am trying to fix. Can someone please help?

My code:


from sklearn.model_selection import train_test_split
from sklearn import datasets
from keras.models import Sequential

iris = datasets.load_iris()
X = iris.data
y = iris.target

def create_model(num_filters, kernel_size, activation_index):
# Create a CNN model with the specified hyperparameters
    activation_map = {0: 'relu', 1: 'sigmoid'}
    activation = activation_map[int(activation_index)]
    model = Sequential()
    model.add(Conv2D(num_filters, kernel_size, activation=activation, input_shape=(4, 1)))
    model.add(MaxPooling2D())
    model.add(Flatten())
    model.add(Dense(3, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

def objective_function(num_filters, kernel_size, activation_index):
    model = create_model(num_filters, kernel_size, activation_index)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    model.fit(X_train, y_train, epochs=10, verbose=0)
    loss, accuracy = model.evaluate(X_test, y_test, verbose=0)
    return accuracy

bounds = {
'num_filters': (32, 128),
'kernel_size': (3, 7),
'activation_index': (0, 1)
}

optimizer = BayesianOptimization(objective_function, bounds)
optimizer.maximize(init_points=5, n_iter=10)

best_params = optimizer.maximize(init_points=5, n_iter=10)
print("Best hyperparameter values:", best_params['x'])
print("Best model accuracy:", best_params['fun'])

The error message:

ValueError: The `kernel_size` argument must be a tuple of 2 integers. Received: 3.048666679718899

0 Answers0