import numpy as np
from sklearn.model_selection import GridSearchCV
import keras.backend as K
from keras.models import Sequential
from keras.datasets import mnist
from keras.layers import Dense
from keras.utils import np_utils
from keras.wrappers.scikit_learn import KerasClassifier
np.random.seed(13)
Using TensorFlow backend.
(x_train, y_train), (x_test, y_test) = mnist.load_data()
num_classes = 10 # class size
input_unit_size = 28*28 # input vector size
x_train = x_train.reshape(x_train.shape[0], input_unit_size)
x_test = x_test.reshape(x_test.shape[0], input_unit_size)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
def create_model(activation='relu', nb_hidden=10):
model = Sequential()
model.add(Dense(nb_hidden, input_dim=784, activation=activation))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
activations = [K.cos, 'softplus', 'softsign', 'relu', 'tanh', 'sigmoid', 'hard_sigmoid', 'linear', 'elu']
nb_hiddens = np.array([100, 1000])
param_grid = dict(activation=activations, nb_hidden=nb_hiddens)
model = KerasClassifier(build_fn=create_model, epochs=30, batch_size=256, verbose=0)
clf = GridSearchCV(estimator=model, param_grid=param_grid, cv=4, scoring='accuracy')
res = clf.fit(x_train, y_train)
print(res.best_score_, res.best_params_)
for i in res.grid_scores_:
print(i)
0.981216666667 {'activation': <function cos at 0x7f8222852268>, 'nb_hidden': 1000} mean: 0.97265, std: 0.00067, params: {'activation': <function cos at 0x7f8222852268>, 'nb_hidden': 100} mean: 0.98122, std: 0.00057, params: {'activation': <function cos at 0x7f8222852268>, 'nb_hidden': 1000} mean: 0.97147, std: 0.00086, params: {'activation': 'softplus', 'nb_hidden': 100} mean: 0.97555, std: 0.00081, params: {'activation': 'softplus', 'nb_hidden': 1000} mean: 0.96892, std: 0.00146, params: {'activation': 'softsign', 'nb_hidden': 100} mean: 0.97753, std: 0.00077, params: {'activation': 'softsign', 'nb_hidden': 1000} mean: 0.97358, std: 0.00127, params: {'activation': 'relu', 'nb_hidden': 100} mean: 0.98088, std: 0.00104, params: {'activation': 'relu', 'nb_hidden': 1000} mean: 0.97217, std: 0.00100, params: {'activation': 'tanh', 'nb_hidden': 100} mean: 0.97780, std: 0.00124, params: {'activation': 'tanh', 'nb_hidden': 1000} mean: 0.96852, std: 0.00087, params: {'activation': 'sigmoid', 'nb_hidden': 100} mean: 0.97577, std: 0.00142, params: {'activation': 'sigmoid', 'nb_hidden': 1000} mean: 0.96715, std: 0.00093, params: {'activation': 'hard_sigmoid', 'nb_hidden': 100} mean: 0.97403, std: 0.00080, params: {'activation': 'hard_sigmoid', 'nb_hidden': 1000} mean: 0.91723, std: 0.00290, params: {'activation': 'linear', 'nb_hidden': 100} mean: 0.91645, std: 0.00459, params: {'activation': 'linear', 'nb_hidden': 1000} mean: 0.97150, std: 0.00075, params: {'activation': 'elu', 'nb_hidden': 100} mean: 0.97487, std: 0.00355, params: {'activation': 'elu', 'nb_hidden': 1000}
/home/nzw/.pyenv/versions/miniconda3-latest/lib/python3.6/site-packages/sklearn/model_selection/_search.py:667: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20 DeprecationWarning)