Как использовать Keras функциональный API с Def? Получение ошибки «UnboundLocalError: локальная переменная« слои », на которую ссылаются до назначения» - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь использовать KerasRegressor с моей моделью:

estimator = KerasRegressor(build_fn=create_model, epochs=num_epochs, batch_size=batch_size, verbose=0)
kfold = KFold(n_splits=10, random_state=seed_value)
results = cross_val_score(estimator, input_var, output_var, cv=kfold)

В учебном пособии для создания модели используется:

def create_model():

    # create model
    model = Sequential()
    model.add(Dense(2, input_dim=3, kernel_initializer='normal', activation='relu'))
    model.add(Dense(2, kernel_initializer='normal', activation='relu'))
    model.add(Dense(1, kernel_initializer='normal'))
    model.compile(loss='mean_squared_error', optimizer=adam)

    return model

Это сработало. Однако, когда я пытаюсь использовать функциональные кера вместо последовательного:

def create_model():

    # create model
    #Start defining the input tensor:
    input_data = layers.Input(shape=(3,))

    #create the layers and pass them the input tensor to get the output tensor:

    hidden1Out = Dense(units=2, activation='relu')(input_data)
    finalOut = Dense(units=2, activation='relu')(hidden1Out)

    output = Dense(1, activation='linear', name='u')(finalOut)  


    # Compile model
    model.compile(loss='mean_squared_error', optimizer=adam)

    return model

, я получаю ошибку «UnboundLocalError: локальная переменная« слои », на которую ссылаются до назначения»

Это происходит в:

input_data = layers.Input(shape=(3,))

Так что с ним не так? как мне это решить?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Я пытался удалить все бесполезные комментарии и избыточный код перед копированием его в stackoverflow. Затем я понял, что чего-то не хватает в моем коде:

model = Model (input_data, output = output)

Итак, после ввода этого:

def create_model():

    # create model
    #Start defining the input tensor:
    input_data = layers.Input(shape=(3,))

    #create the layers and pass them the input tensor to get the output tensor:

    hidden1Out = Dense(units=2, activation='relu')(input_data)
    finalOut = Dense(units=2, activation='relu')(hidden1Out)

    output = Dense(1, activation='linear', name='u')(finalOut)  

    model = Model(input_data,outputs = output)

    # Compile model
    model.compile(loss='mean_squared_error', optimizer=adam)

    return model

Я наконец получил это за работой! Спасибо Матиасу Вальденегро, все равно alsaibi.

0 голосов
/ 02 апреля 2020

я не знаю, будет ли это хорошая работа, но попробуйте использовать global

...