OPTUNA 如何优化列表超参数

问题描述 投票:0回答:1

我正在尝试使用 Optuna 优化我的超参数,但我不知道如何告诉 Optuna ENCODER NEURONS 必须是一个长度不固定的列表(它也是一个超参数)并且值是整数(第一个必须是 input_dim,建议使用另一个)。 我尝试的代码是:

def objective(trial):
    LATENT_DIM = trial.suggest_int("latent_dim",1,5)
    HIDDEN_ACTIVATION = trial.suggest_categorical("hidden_activation", ["relu", "sigmoid", "tanh"])
    EPOCHS = trial.suggest_int("epochs",1,100)
    BATCH_SIZE = trial.suggest_int("batch_size",32,256,32)
    DROPOUT_RATE = trial.suggest_float("dropout_rate", 0, 0.6)
    L2_REGULARIZER = trial.suggest_float("l2_regularizer", 0, 0.6)
    ENCODER_NEURONS = [input_dim] + [trial.suggest_int('encoder_neuron', 7, 256) for _ in range(trial.suggest_int('num_hidden_layers_encoder', 1, 5))]
    DECODER_NEURONS = [trial.suggest_int('decoder_neuron', 7, 256) for _ in range(trial.suggest_int('num_hidden_layers_decoder', 1, 5))]+[input_dim]
    
    model=VAE(encoder_neurons=ENCODER_NEURONS,decoder_neurons=DECODER_NEURONS,latent_dim=LATENT_DIM,
             hidden_activation=HIDDEN_ACTIVATION,epochs=EPOCHS,batch_size=BATCH_SIZE,
             dropout_rate=DROPOUT_RATE,l2_regularizer=L2_REGULARIZER,contamination=CONTAMINATION,random_state=RANDOM_STATE)
    model.fit(x_train_scaled)
    y_pred=model.predict(x_test_scaled)
    score=fbeta_score(y_test,y_pred,beta=2)
    return score

但是不起作用

我想要一个像 [7,16,32] 或 [7,32] 或 [7,16,32,64] 这样的列表作为输出,其中 7 是 input_dim。但是(部分)输出是 'num_hidden_layers_encoder': 2, 'encoder_neuron': 175, 'num_hidden_layers_decoder': 3, 'decoder_neuron': 99 这不是我想要的。 有人可以帮助我吗? 谢谢

python neural-network hyperparameters optuna
1个回答
0
投票

也许您可以尝试为列表中的每个元素指定不同的名称。 像这样的东西:

ENCODER_NEURONS = [input_dim] + [trial.suggest_int('encoder_neuron'+str(i), 7, 256) for i in range(trial.suggest_int('num_hidden_layers_encoder', 1, 5))]

© www.soinside.com 2019 - 2024. All rights reserved.