Гипер-настройка параметров с GridsearchCV для нескольких выходных данных (Neural Network) с использованием керас - PullRequest
0 голосов
/ 04 июля 2019

У меня есть данные, которые имеют 2 выходные переменные и несколько входных переменных, я использовал нейронную сеть для создания модели, но теперь я хочу выполнить гипер-настройку параметров.

Для настройки я использую поиск по сетке, я написал код для поиска по сетке, но при попытке использования grid.fit (X_train, Y_train) произошла ошибка. Ошибка ValueError: Ошибка при проверке целевого объекта модели: список Кучевые массивы, которые вы передаете своей модели, не соответствуют ожидаемому размеру. Ожидается увидеть 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 выходными переменными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...