0

我正在使用optuna框架为我的预期CNN网络选择最佳参数,包括层数、层中的过滤器、优化器等。我可以确认我的最佳参数是一个包含以下内容的字典:

study = optuna.create_study()
study.optimize(objective, n_trials=100)

    print(study.best_params)
    {'num_layer': 4,
     'mid_units': 200.0,
     'num_filter_0': 96.0,
     'num_filter_1': 128.0,
     'num_filter_2': 112.0,
     'num_filter_3': 128.0,
     'dropout_rate0': 0.39590554209376033,
     'dropout_rate1': 0.3261331226010852,
     'optimizer': 'sgd'}

然后,我如何形成一个包含层数、退出等的列表study.best_params,例如:

my_layers = [96, 128, 112, 128]
drops = [0.39590554209376033,0.3261331226010852]

目标是访问这些值并创建我的网络架构,类似于:

model = Sequential()
model.add(Conv2D(my_layers[0], kernel_size=...))
model.add(Conv2D(my_layers[1], ...))
model.add(Conv2D(my_layers[2], ...))
...    
model.add(MaxPooling2D(pool_size=(1, 2)))
model.add(Dropout(dropout_rate[0]))
model.add(Flatten())
model.add(Dense(mid_units))
model.add(Dropout(dropout_rate[1]))
model.add(Dense(num_classes, activation='softmax'))
4

1 回答 1

0

如果顺序很重要,则将一个元素添加到列表中

output = {..data}

for i in output:
    if 'num_filter' in i:
        my_layers.append([i , output.get(i)])
    elif 'dropout' in i:
        drops.append([i , output.get(i)])

my_layers.sort()
drops.sort()

for j in range(len(my_layers)):
    my_layers[j] = my_layers[j][1]
   
for k in range(len(drops)):
    drops[k] =  drops[k][1]
于 2021-03-23T15:48:02.750 回答