2

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

为了调整,我使用网格搜索,我编写了网格搜索的代码,但是当我尝试 grid.fit(X_train, Y_train) 时出现错误,错误是 ValueError: Error when checks model target: the list of Numpy arrays that您传递给模型的大小不是模型预期的大小。预计会看到 2 个数组,但得到了以下 1 个数组的列表:[array([[ 1.62970054, 2.33817343],然后我制作了 2 个不同的数组,然后作为 grid.fit(X_train, [Y [0], Y[1]),因为有 2 个输出,现在它显示 ValueError: Found input variables with contrast numbers of samples: [10000, 2]。有什么办法可以纠正这个代码,或者 GridsearchCV 不要'不接受多个输出值?我使用 keras 功能 API 制作了 keras 模型,然后我通过了 kerasRegressor 以便我可以实现 GridsearchCV。

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: Error when checks model target: 您传递给模型的 Numpy 数组列表不是模型预期的大小。预计会看到 2 个数组,但得到了以下 1 个数组的列表:[array([[ 1.62970054, 2.33817343], [ 3.44504814, 6.05534019], [ 1.58155862, 0.8296778 ], ..., [ 1.274465378, 6.719]88 , [ 7.99909866, 17.82736535], [ 1.4 ... 当我制作 2 个不同的 2 个输出数组然后将最后一行重写为 grid.fit(X_train, [Y[0], Y[1]) 时的错误是 ValueError:发现样本数量不一致的输入变量:[10000, 2]

我的数据是 10000 个观察值,有 17 个输入变量和 2 个输出变量。

4

0 回答 0