2017-12-13 11 views
0

KerasとSklearnを使用して自分のNNのハイパーパラメータを最適化しようとしています。 私はKerasClassifierを使っています(これは分類の問題です)。 隠しレイヤの数を最適化しようとしています。 ケラスでどのように行うのか分かりません(実際には、隠しレイヤの数を最大にするためにcreate_model関数を設定する方法が不思議です)。 誰も助けてくれませんか?グリッドケラスで隠れたレイヤーの数を検索

私のコード(だけ重要な部分):

## Import `Sequential` from `keras.models` 
from keras.models import Sequential 

# Import `Dense` from `keras.layers` 
from keras.layers import Dense 

def create_model(optimizer='adam', activation = 'sigmoid'): 
    # Initialize the constructor 
    model = Sequential() 
    # Add an input layer 
    model.add(Dense(5, activation=activation, input_shape=(5,))) 
    # Add one hidden layer 
    model.add(Dense(8, activation=activation)) 
    # Add an output layer 
    model.add(Dense(1, activation=activation)) 
    #compile model 
    model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics= 
    ['accuracy']) 
    return model 
my_classifier = KerasClassifier(build_fn=create_model, verbose=0)# Create 
hyperparameter space 
epochs = [5, 10] 
batches = [5, 10, 100] 
optimizers = ['rmsprop', 'adam'] 
activation1 = ['relu','sigmoid'] 
# Create grid search 
grid = RandomizedSearchCV(estimator=my_classifier, 
param_distributions=hyperparameters) #inserir param_distributions 

# Fit grid search 
grid_result = grid.fit(X_train, y_train) 
# Create hyperparameter options 
hyperparameters = dict(optimizer=optimizers, epochs=epochs, 
batch_size=batches, activation=activation1) 
# View hyperparameters of best neural network 
grid_result.best_params_ 
+0

ケラスモデルはその点で静的です。あなたは多くのモデルを自分で作成し、どれが良いかを確認する必要があります。 –

答えて

3

あなたはあなたにそれをパラメータとして追加する必要がありハイパーを隠れ層の数を作りたい場合は、あなたのKerasClassifierbuild_fnのような:

def create_model(optimizer='adam', activation = 'sigmoid', hidden_layers=1): 
    # Initialize the constructor 
    model = Sequential() 
    # Add an input layer 
    model.add(Dense(5, activation=activation, input_shape=(5,))) 

    for i in range(hidden_layers): 
     # Add one hidden layer 
     model.add(Dense(8, activation=activation)) 

    # Add an output layer 
    model.add(Dense(1, activation=activation)) 
    #compile model 
    model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics= 
    ['accuracy']) 
    return model 

次に、隠しレイヤの数を辞書に追加することで最適化することができます。これはRandomizedSearchCVparam_distributionsに渡されます。

他にも、出力レイヤーに使用するactivationを別のレイヤーから分離する必要があります。 異なるクラスの起動機能は、隠れ層とバイナリ分類で使用される出力層に適しています。

関連する問題