1. 程式人生 > >深度學習模型調參-基於keras的python學習筆記(四)

深度學習模型調參-基於keras的python學習筆記(四)

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_44474718/article/details/86250535

適用於少量資料的實驗是非常有效的方法。

from keras.models import Sequential
from keras.layers import Dense
import numpy as np
from sklearn.model_selection import GridSearchCV
from keras.wrappers.scikit_learn import KerasClassifier


# 構建模型
def create_model(optimizer='adam', init='glorot_uniform'): # 構建模型 model = Sequential() model.add(Dense(units=12, kernel_initializer=init, input_dim=8, activation='relu')) model.add(Dense(units=8, kernel_initializer=init, activation='relu')) model.add(Dense(units=1, kernel_initializer=
init, activation='sigmoid')) # 編譯模型 model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy']) return model seed = 7 # 設定隨機數種子 np.random.seed(seed) # 匯入資料 dataset = np.loadtxt('pima-indians-diabetes.csv', delimiter=',') # 分割輸入x和輸出Y x = dataset[:, 0 : 8] Y = dataset[
:, 8] #建立模型 for scikit-learn model = KerasClassifier(build_fn=create_model, verbose=0) # 構建需要調參的引數 param_grid = {} param_grid['optimizer'] = ['rmsprop', 'adam'] param_grid['init'] = ['glorot_uniform', 'normal', 'uniform'] param_grid['epochs'] = [50, 100, 150, 200] param_grid['batch_size'] = [5, 10, 20] # 調參 grid = GridSearchCV(estimator=model, param_grid=param_grid) results = grid.fit(x, Y) # 輸出結果 print('Best: %f using %s' % (results.best_score_, results.best_params_)) means = results.cv_results_['mean_test_score'] stds = results.cv_results_['std_test_score'] params = results.cv_results_['params'] for mean, std, param in zip(means, stds, params): print('%f (%f) with: %r' % (mean, std, param))

筆者用了20分鐘!!!而且執行一次不一定能找到最優的引數組合,需要多次重複執行。