Нейронная сеть: TypeError: fitness () получила неожиданный аргумент ключевого слова 'embedding' - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь оптимизировать NN с помощью скопта: https://scikit -optimize.github.io / ноутбуки / sklearn-gridsearchcv-replacement.html

print('...load ranges for each dimension...')
dim_num_embedding_nodes = Integer(low=32, high=512, name='embedding')
dim_hidden_layer = Integer(low=32, high=512, name='hidden_layer_size')
dim_batch_size = Integer(low=32, high=128, name='batch_size')
dim_alpha = Real(low=0,high=2,name="alpha")
dim_dropout = Real(low=0,high=1,name="dropout")
dim_recurrent_dropout = Real(low=0,high=1,name="recurrent_dropout")


dimensions = [dim_num_embedding_nodes,
              dim_hidden_layer,
              dim_batch_size,
              dim_alpha,
              dim_dropout,
              dim_recurrent_dropout
             ]
default_parameters = [512, 64, 64, 0.01, 0.3, 0.3]


def create_model(embedding_dim, hidden_layer_size,
                 alpha, dropout, recurrent_dropout):
    model = Sequential()
    model.add(Embedding(input_dim=3000, output_dim=embedding_dim, input_length=110))
    model.add(GRU(units=hidden_layer_size, recurrent_dropout=recurrent_dropout, return_sequences=False))
    model.add(ELU(alpha=alpha))
    model.add(Dropout(rate=dropout))
    model.add(Dense(2, activation='softmax'))
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=["binary_accuracy"])
    return model

print('...lets do a bunch of trials...')
@use_named_args(dimensions=dimensions)
def fitness(embedding_dim, hidden_layer_size, batch_size, 
            alpha, dropout, recurrent_dropout):
    model = create_model(embedding_dim=embedding_dim, 
                         hidden_layer_size=hidden_layer_size,
                         alpha=alpha,
                         dropout=dropout,
                         recurrent_dropout=recurrent_dropout)

    # named blackbox becuase it represents the structure
    blackbox = model.fit(x_train_sequence, y_train, batch_size=batch_size, 
                         validation_data=(x_test_sequence, y_test),
                         verbose=1, shuffle=True, epochs=3)
    # return the validation accuracy for the last epoch.
    accuracy = blackbox.history['val_binary_accuracy'][-1]

    # Print the classification accuracy.
    print()
    print("Accuracy: {0:.2%}".format(accuracy))
    print()


    return -accuracy



gp_result = gp_minimize(func=fitness,
                            dimensions=dimensions,
                            n_calls=12,
                            noise= 0.01,
                            n_jobs=-1,
                            kappa = 5,
                            x0=default_parameters)

print("best accuracy was " + str(round(gp_result.fun *-100,2))+"%.")

Тем не менее, я получаю эту ошибку:

Traceback (последний вызов был последним):

Файл "", строка 1, в runfile ( '/ Users / mattiavicari / Desktop / Optimize_NLP / actual_skopt.py', wdir = '/ Users / mattiavicari / Desktop / Optimize_NLP')

Файл "/Users/mattiavicari/anaconda3/envs/Optimize_DL/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", строка 827, в runfile execfile (имя файла, пространство имен)

Файл "/Users/mattiavicari/anaconda3/envs/Optimize_DL/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", строка 110, в execfile exec (compile (f.read (), filename, 'exec'), пространство имен)

Файл "/Users/mattiavicari/Desktop/Optimize_NLP/actual_skopt.py", строка 298, в x0 = default_parameters)

Файл "/Users/mattiavicari/anaconda3/envs/Optimize_DL/lib/python3.7/site-packages/skopt/optimizer/gp.py", строка 228, в gp_minimize callback = callback, n_jobs = n_jobs)

Файл "/Users/mattiavicari/anaconda3/envs/Optimize_DL/lib/python3.7/site-packages/skopt/optimizer/base.py", строка 231, в base_minimize y0 = список (map (func, x0))

Файл "/Users/mattiavicari/anaconda3/envs/Optimize_DL/lib/python3.7/site-packages/skopt/utils.py", строка 636, в обертке target_value = func (** arg_dict)

TypeError: fitness () получил неожиданный аргумент ключевого слова 'embedding'

Может ли кто-нибудь объяснить мне, что я делаю неправильно?

Заранее большое спасибо!

...