【问题标题】:Grid Search the number of hidden layers with kerasGrid Search 用 keras 搜索隐藏层数
【发布时间】:2018-05-27 02:14:43
【问题描述】:

我正在尝试使用 Keras 和 sklearn 优化我的 NN 的超参数。 我结束了 KerasClassifier(这是一个分类问题)。 我正在尝试优化隐藏层的数量。 我无法弄清楚如何使用 keras 来做到这一点(实际上我想知道如何设置函数 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_

【问题讨论】:

  • Keras 模型在这方面是静态的。您必须自己创建许多模型,然后看看哪一个表现更好。

标签: python neural-network keras hyperparameters


【解决方案1】:

如果您想将隐藏层的数量作为超参数,您必须将其作为参数添加到您的 KerasClassifier build_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 与其他层分开。 不同类别的激活函数适用于隐藏层和二进制分类中使用的输出层。

【讨论】:

    猜你喜欢
    • 2019-10-01
    • 2018-01-25
    • 2019-01-27
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 2019-05-29
    相关资源
    最近更新 更多