所以我一直在尝试使用网格搜索来优化我的keras模型的参数,对于大多数部件来说它工作正常但是每当我尝试优化每个图层的参数时,模型就会挂起 . 我想知道是否有人可以调查并告诉我发生了什么,或者是否有什么我做错了 .

def create_model(dense_layers=2,
             dense_size_1=6,
             dense_size_2=7,
             init_mode_1='uniform',
             init_mode_2='uniform',
             gd='adam',
             transfer_1='relu', transfer_2='relu'):
    K.clear_session()
    model = Sequential()
    for i in range(0, dense_layers+1):
        if i == 1:
            model.add(Dense(dense_size_1,input_dim=8,activation=transfer_1, kernel_initializer=init_mode_1))
        if i == 2:
            model.add(Dense(dense_size_2, activation=transfer_2, kernel_initializer=init_mode_2))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(loss='binary_crossentropy', optimizer=gd, metrics= ['accuracy'])
return model


model = KerasClassifier(build_fn=create_model, epochs=10, batch_size=10, verbose=1)

dense_size_1 = [1, 5, 10, 15, 20, 25, 30]
dense_size_2 = [1, 5, 10, 15, 20, 25, 30]
init_mode_1 = ['uniform', 'lecun_uniform', 'normal', 'zero', 'glorot_normal', 'glorot_uniform', 'he_normal', 'he_uniform']
init_mode_2 = ['uniform', 'lecun_uniform', 'normal', 'zero', 'glorot_normal', 'glorot_uniform', 'he_normal', 'he_uniform']
gd = ['adam', 'sgd']
transfer_1 = ['relu', 'tanh']
transfer_2 = ['relu', 'tanh']

param_grid = dict(dense_size_1=dense_size_1, dense_size_2=dense_size_2,
                  init_mode_1=init_mode_1, init_mode_2=init_mode_2,
                  transfer_1=transfer_1, transfer_2=transfer_2)

grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1

grid_result = grid.fit(X, y)

如果我只是为每一层,优化器,时期和批量大小使用隐藏神经元等参数,它完美地运行良好和精细但如果我使它更复杂,如每个隐藏层中的神经元的单独激活函数或神经元的单独内核初始化器,它会挂起每个隐藏层 .

这有什么可能出错的?