使用keras使用GridsearchCV对多输出数据(神经网络)进行超参数调整

时间:2019-07-04 02:50:59

标签: keras neural-network cross-validation hyperparameters gridsearchcv

我有一个包含2个输出变量和多个输入变量的数据,我使用神经网络制作了模型,但现在我想进行超参数调整。

为了进行调整,我使用了网格搜索,我编写了用于网格搜索的代码,但是尝试使用grid.fit(X_train,Y_train)时出现错误,错误为ValueError:检查模型目标时出错:您传递给模型的Numpy数组不是模型期望的大小。预计会看到2个数组,但获得了以下1个数组的列表:[array([[1.62970054,2.33817343], 然后我制作了2个不同的数组,然后将其作为grid.fit(X_train,[Y [0],Y [1])传递到代码中,因为有2个输出,现在它显示ValueError:找到了编号不一致的输入变量样本:[10000,2]。有什么办法可以纠正此代码,或者GridsearchCV不接受多个输出值?我使用keras功能性API制作了keras模型,然后通过kerasRegressor进行传递,以便可以实现GridsearchCV。我被困在应该是什么代码上,以便grid.fit()可以运行...或者是否可以通过其他方法来进行超参数调整

def create_model(activation='relu', dropout_rate=0.0, neurons=10, optimizer='Adam', weight_constraint=0):
  main_input = Input(shape=(17,), name='main_input')
  hidden = Dense(neurons, activation=activation, name='hidden', kernel_constraint=maxnorm(weight_constraint))(main_input)
  hidden = Dropout(dropout_rate)(hidden)
  out1 = Dense(1,  activation='linear', name='out1')(hidden)
  out2 = Dense(1,  activation='linear',name='out2')(hidden)
  model = Model(inputs=main_input, outputs=[out1,out2])
  model.compile(optimizer = optimizer,loss={'out1':'mean_squared_error', 'out2':'mean_squared_error'})
  return model



model = KerasRegressor(build_fn=create_model, batch_size=32, epochs=100)

activation =  ['relu', 'tanh', 'sigmoid', 'linear'] 

dropout_rate = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
weight_constraint=[1, 2, 3, 4, 5]
neurons = [10, 30, 50, 70, 90]
optimizer = [ 'SGD', 'RMSprop', 'Adagrad', 'Adadelta', 'Adam']
epochs = [50, 100, 150, 200]
batch_size = [10, 20, 30, 40]

param_grid = dict(neurons=neurons, activation=activation, dropout_rate=dropout_rate, weight_constraint=weight_constraint, epochs=epochs, batch_size=batch_size, optimizer=optimizer)

grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1, cv=5)

grid_result = grid.fit(X_train, Y_train)

上述代码的最后一行是grid_result = grid.fit(X_train,Y_train)为ValueError时的错误:检查模型目标时出错:传递给模型的Numpy数组列表的大小不是预期的模型。预计会看到2个数组,但获得了以下1个数组的列表:[array([[1.62970054,2.33817343],        [3.44504814,6.05534019],        [1.58155862,0.8296778],        ...,        [1.27446578,6.71978433],        [7.99909866,17.82736535],        [1.4 ... 当我制作2个输出的2个不同的数组,然后将最后一行重写为grid.fit(X_train,[Y [0],Y [1])时,错误是ValueError:找到样本数量不一致的输入变量:[10000, 2]

我的数据是10000个观测值,其中包含17个输入变量和2个输出变量。

0 个答案:

没有答案