Data Science Academy - Deep Learning II

GridSearch

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


Using TensorFlow backend.

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))


Melhor Score: 0.704427 usando {'batch_size': 10, 'epochs': 100}
0.572917 (0.045143) com: {'batch_size': 10, 'epochs': 10}
0.694010 (0.012075) com: {'batch_size': 10, 'epochs': 50}
0.704427 (0.008027) com: {'batch_size': 10, 'epochs': 100}
0.614583 (0.024360) com: {'batch_size': 20, 'epochs': 10}
0.348958 (0.024774) com: {'batch_size': 20, 'epochs': 50}
0.348958 (0.024774) com: {'batch_size': 20, 'epochs': 100}
0.348958 (0.024774) com: {'batch_size': 40, 'epochs': 10}
0.632813 (0.028705) com: {'batch_size': 40, 'epochs': 50}
0.656250 (0.027621) com: {'batch_size': 40, 'epochs': 100}
0.631510 (0.035564) com: {'batch_size': 60, 'epochs': 10}
0.636719 (0.022326) com: {'batch_size': 60, 'epochs': 50}
0.562500 (0.157837) com: {'batch_size': 60, 'epochs': 100}
0.638021 (0.042830) com: {'batch_size': 80, 'epochs': 10}
0.634115 (0.029635) com: {'batch_size': 80, 'epochs': 50}
0.658854 (0.017566) com: {'batch_size': 80, 'epochs': 100}
0.493490 (0.129333) com: {'batch_size': 100, 'epochs': 10}
0.528646 (0.103317) com: {'batch_size': 100, 'epochs': 50}
0.660156 (0.015947) com: {'batch_size': 100, 'epochs': 100}

Fim