数据分析师养成之路之keras篇(sklearn 与keras结合实现调参)

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)

猜你喜欢

转载自blog.csdn.net/lulujiang1996/article/details/81543291
今日推荐