0

我对 skopt 的 gp_minimize 有疑问。我正在为迁移学习(基本模型 vgg19)进行超参数调整。一切正常,直到 gp_minimize 开始评估最佳点(评估随机点工作正常)。我有这个错误,我花了几天时间,我仍然不知道该怎么做:

Traceback (most recent call last):
  File "C:/Users/mea/Train_models/04_VGG19_train_model.py", line 144, in <module>
    search_result = gp_minimize(func=fitness,
  File "C:\Users\me\anaconda3\envs\Train_models\lib\site-packages\skopt\optimizer\gp.py", line 259, in gp_minimize
    return base_minimize(
  File "C:\Users\Wme\anaconda3\envs\Train_models\lib\site-packages\skopt\optimizer\base.py", line 300, in base_minimize
    result = optimizer.tell(next_x, next_y)
  File "C:\Users\mea\anaconda3\envs\Train_models\lib\site-packages\skopt\optimizer\optimizer.py", line 493, in tell
    return self._tell(x, y, fit=fit)
  File "C:\Users\me\anaconda3\envs\Train_models\lib\site-packages\skopt\optimizer\optimizer.py", line 552, in _tell
    X = self.space.transform(self.space.rvs(
  File "C:\Users\me\anaconda3\envs\Train_models\lib\site-packages\skopt\space\space.py", line 900, in rvs
    columns.append(dim.rvs(n_samples=n_samples, random_state=rng))
  File "C:\Users\Weronika Gramacka\anaconda3\envs\Train_models\lib\site-packages\skopt\space\space.py", line 698, in rvs
    return self.inverse_transform(list(choices))
  File "C:\Users\me\anaconda3\envs\Train_models\lib\site-packages\skopt\space\space.py", line 685, in inverse_transform
    inv_transform = super(Categorical, self).inverse_transform(Xt)
  File "C:\Users\me\anaconda3\envs\Train_models\lib\site-packages\skopt\space\space.py", line 168, in inverse_transform
    return self.transformer.inverse_transform(Xt)
  File "C:\Users\me\anaconda3\envs\Train_models\lib\site-packages\skopt\space\transformers.py", line 309, in inverse_transform
    X = transformer.inverse_transform(X)
  File "C:\Users\me\anaconda3\envs\Train_models\lib\site-packages\skopt\space\transformers.py", line 216, in inverse_transform
    return [
  File "C:\Users\me\anaconda3\envs\Train_models\lib\site-packages\skopt\space\transformers.py", line 217, in <listcomp>
    self.inverse_mapping_[int(np.round(i))] for i in Xt
KeyError: 6

Process finished with exit code 1

代码来自教程,如下所示(仅重要部分):

dim_num_dense_layers = Integer(low=1, high=3, name='num_dense_layers')
dim_num_dense_nodes = Integer(low=60, high=1500, name='num_dense_nodes')
dim_activation = Categorical(categories=[ 'sigmoid', 'tanh', 'relu', 'softmax'],
                             name='activation')
dim_dropout = Real(low = 0.01, high = 0.4, name = 'dropout')
dim_init = Categorical(categories = ['uniform', 'lecun_uniform', 'normal', 'zero', 'glorot_normal', 'glorot_uniform', 'he_normal', 'he_uniform'], name = 'kernel_initializer')
dim_loss = Categorical(categories = ['categorical_crossentropy', 'categorical_hinge', 'mean_squared_error', 'huber_loss'], name = 'loss')

dimensions = [dim_num_dense_layers,
              dim_num_dense_nodes,
              dim_activation,
              dim_dropout,
              dim_init,
              dim_loss]

default_parameters = [2, 600, 'relu', 0.2, 'uniform', 'huber_loss']
@use_named_args(dimensions=dimensions)
def fitness(num_dense_layers, num_dense_nodes, activation, dropout, kernel_initializer, loss):
    # Print the hyper-parameters.
    keras.backend.clear_session()
    

    model = create_model(num_dense_layers, num_dense_nodes, activation, dropout, kernel_initializer, loss)

    log_dir = "Tensor_board/04/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
    tensorboard_callback = TensorBoard(
        log_dir='log_dir',
        histogram_freq=1,
        write_graph=True,
        write_grads=False,
        write_images=False)

    history = model.fit(train_data,
                        epochs=1,
                        batch_size=32,
                        validation_data=val_data,
                        callbacks=[tensorboard_callback])

    accuracy = max(history.history['val_accuracy'])

    global best_accuracy
    if accuracy > best_accuracy:
        model.save("Models/vgg19_flat.h5")

        best_accuracy = accuracy

    del model
    gc.collect()
    keras.backend.clear_session()
    return -accuracy

checkpoint_saver = CheckpointSaver("./checkpoint.pkl", compress=9)
search_result = gp_minimize(func=fitness,
                            dimensions=dimensions,
                            acq_func='EI',
                            n_calls=30,
                            n_initial_points=1,
                            x0=default_parameters, verbose=True, callback=[checkpoint_saver])
4

0 回答 0