#optimization #neural-network #hyperparameters
#оптимизация #нейронная сеть #гиперпараметры
Вопрос:
Я впервые пытаюсь выполнить байесовскую оптимизацию для нейронной сети и столкнулся с этой ошибкой:
Ошибка значения: Входные данные содержат NaN, бесконечность или значение, слишком большое для dtype(‘float64’).
Я проверил свои входные данные, у меня нет никаких nan или бесконечных значений.
Код для настройки HP является
def nn_cl_bo(neurons, activation, optimizer, learning_rate, batch_size, layers1, layers2, normalization, dropout, dropout_rate, epochs): optimizerL = ['Adam', 'RMSprop'] optimizerD= {'Adam':Adam(lr=learning_rate), 'RMSprop':RMSprop(lr=learning_rate)} activationL = ['linear','relu', 'tanh'] optimizer = optimizerD[optimizerL[round(optimizer)]] neurons = round(neurons) activation = activationL[round(activation)] batch_size = round(batch_size) epochs = round(epochs) def nn_cl_fun(): #opt = Adam(lr = learning_rate) nn = Sequential() nn.add(SimpleRNN(neurons, input_shape=(25,1), activation=activation)) nn.add(Dense(neurons, activation=activation)) if normalization gt; 0.5: nn.add(BatchNormalization()) for i in range(layers1): nn.add(Dense(neurons, activation=activation)) if dropout gt; 0.5: nn.add(Dropout(dropout_rate, seed=123)) for i in range(layers2): nn.add(Dense(neurons, activation=activation)) #nn.add(Dropout(0.2)) nn.add(Dense(neurons, activation=activation)) nn.add(Dense(1, activation='linear')) nn.compile(loss='mse', optimizer=optimizer, metrics=['mse']) return nn es = EarlyStopping(monitor='mse', mode='min', verbose=0) nn = KerasRegressor(build_fn=nn_cl_fun, epochs=epochs, batch_size=batch_size, verbose=0) kf = KFold(n_splits=5, shuffle=True, random_state=123) score = cross_val_score(nn, train_x, train_y, scoring='neg_mean_squared_error', cv=kf, fit_params={'callbacks':[es]}).mean() return score # Set parameters params_nn ={'neurons': (10, 100), 'activation':(0, 2), 'optimizer':(0,1), 'learning_rate':(0.01, 1), 'batch_size':(200, 500), 'layers1':(1,3), 'layers2':(1,3), 'normalization':(0,1), 'dropout':(0,1), 'dropout_rate':(0,0.3), 'epochs':(20, 50)} # Run Bayesian Optimization nn_bo = BayesianOptimization(nn_cl_bo, params_nn) nn_bo.maximize(init_points=25, n_iter=4)
Однако вывод, когда я запускаю приведенный выше код, выглядит следующим образом. Целевой столбец отображается как nan. Не уверен, что это является причиной ошибки значения. Кто-нибудь может помочь мне понять, что это за целевая колонка или почему я привожу сюда нан?
| iter | target | activa... | batch_... | dropout | dropou... | epochs | layers1 | layers2 | learni... | neurons | normal... | optimizer | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | 1 | nan | 1.224 | 250.7 | 0.4361 | 0.2308 | 28.86 | 1.298 | 1.045 | 0.426 | 31.48 | 0.3377 | 0.9907 | | 2 | nan | 0.4755 | 224.4 | 0.6696 | 0.1864 | 28.23 | 1.932 | 1.237 | 0.08322 | 91.07 | 0.794 | 0.8406 | | 3 | nan | 1.63 | 497.3 | 0.5773 | 0.2441 | 32.64 | 1.055 | 1.908 | 0.1143 | 83.55 | 0.6977 | 0.5653 | ....