keras 调参(姑且这么叫)
参考网址: http://www.cnblogs.com/surfzjy/p/6445404.html
话不多说,上代码:
导包:
from keras.datasets import cifar10
from keras.layers import Input, Dense, Dropout, Activation, Flatten
from keras import Model,models
from keras.models import Sequential, load_model, Model
from keras.layers import Convolution2D, MaxPooling2D
import keras
# sklean接口的包装器KerasClassifier,作为sklearn的分类器接口
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.preprocessing import label_binarize
from sklearn.grid_search import GridSearchCV
import numpy as np
加载数据
(X_train,y_train),(X_test,y_test)=cifar10.load_data()
y_test=label_binarize(y_test,np.arange(10))
y_train=label_binarize(y_train,np.arange(10))
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255
建立模型
注意:模型一定要放在函数中!!否则可能会出现一些线程问题.
(当然,模型还是只作为参考,很low)
def make_model():
x=Input(shape=(32,32,3))
y=x
y = Convolution2D(filters=64, kernel_size=3, strides=1, padding='same', activation='relu', kernel_initializer='he_normal')(y)
y = Convolution2D(filters=64, kernel_size=3, strides=1, padding='same', activation='relu', kernel_initializer='he_normal')(y)
y = MaxPooling2D(pool_size=2, strides=2, padding='valid')(y)
y=Flatten()(y)
y=Dropout(0.2)(y)
y=Dense(units=10,activation='softmax')(y)
model=Model(inputs=x,outputs=y,name='model')
model.compile(loss='categorical_crossentropy',调用接口,开始调参
optimizer='adadelta',
metrics=['accuracy'])
return model
调用接口,开始调参
my_classifier = KerasClassifier(make_model)
validator = GridSearchCV(my_classifier,
param_grid={
'epochs': [2],
'batch_size':[64]},
scoring='roc_auc')
validator.fit(X_train, y_train)
print('Yhe parameters of the best model are:\n')
#输出的是字典
print(validator.best_params_)
best_model = validator.best_estimator_.model
# 度量值的名称
metric_names = best_model.metrics_names
# metric_names = ['loss', 'acc']
# 度量值的数值
metric_values = best_model.evaluate(X_test, y_test)
for metric, value in zip(metric_names, metric_values):
print(metric, ': ', value)