Usando Scikit-Learn e Keras para Busca em Grid do melhor valor de batch size e epochs
In [1]:
# Forçando o Keras a utilizar a CPU
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = ""
In [2]:
# Import dos Módulos
import numpy
from sklearn.model_selection import GridSearchCV
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
Função para criar o modelo necessário para o KerasClassifier
In [3]:
def create_model():
model = Sequential()
model.add(Dense(12, input_dim = 8, activation = 'relu'))
model.add(Dense(1, activation = 'sigmoid'))
# Compila o modelo
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
return model
Prepara o modelo e aplica Grid Search
Dataset: https://archive.ics.uci.edu/ml/datasets/pima+indians+diabetes
In [4]:
# Valor de seed para reproducibilidade
seed = 7
numpy.random.seed(seed)
# Carrega o dataset
dataset = numpy.loadtxt("data/pima-indians-diabetes.csv", delimiter=",")
# Split em treino e teste
X = dataset[:,0:8]
Y = dataset[:,8]
# Cria o modelo
model = KerasClassifier(build_fn = create_model, verbose = 0)
# Define os parâmetros para o Grid Search
batch_size = [10, 20, 40, 60, 80, 100]
epochs = [10, 50, 100]
param_grid = dict(batch_size = batch_size, epochs = epochs)
# Grid Search
grid = GridSearchCV(estimator = model, param_grid = param_grid, n_jobs = -1)
grid_result = grid.fit(X, Y)
# Sumariza os resultados
print("Melhor Score: %f usando %s" % (grid_result.best_score_, grid_result.best_params_))
means = grid_result.cv_results_['mean_test_score']
stds = grid_result.cv_results_['std_test_score']
params = grid_result.cv_results_['params']
for mean, stdev, param in zip(means, stds, params):
print("%f (%f) com: %r" % (mean, stdev, param))