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

Keras 모델은 그 점에서 정적입니다. 당신은 많은 모델을 직접 만들고 어느 것이 더 잘 작동하는지 확인해야합니다. –

답변

3

당신은 당신이 매개 변수로 추가 가지고 hyperparameter를 숨겨진 레이어의 수를 확인하려면 당신의 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을 분리해야합니다. 다른 클래스의 활성화 함수는 숨겨진 레이어와 바이너리 분류에 사용되는 출력 레이어에 적합합니다.