Не умеет загружать керас тренированную модель - PullRequest
0 голосов
/ 18 марта 2019

Я использую следующий код для обучения сети HAN. Кодовая ссылка

Я успешно обучил модель, но когда я попытался загрузить модель, используя keras load_model, она выдает мне следующую ошибку - Неизвестный слой: AttentionWithContext

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Добавьте следующую функцию в файл AttentionWithContext.py:

def create_custom_objects():
    instance_holder = {"instance": None}

    class ClassWrapper(AttentionWithContext):
        def __init__(self, *args, **kwargs):
            instance_holder["instance"] = self
            super(ClassWrapper, self).__init__(*args, **kwargs)

    def loss(*args):
        method = getattr(instance_holder["instance"], "loss_function")
        return method(*args)

    def accuracy(*args):
        method = getattr(instance_holder["instance"], "accuracy")
        return method(*args)
    return {"ClassWrapper": ClassWrapper ,"AttentionWithContext": ClassWrapper, "loss": loss,
            "accuracy":accuracy}

При загрузке модели:

from AttentionWithContext import create_custom_objects

model = keras.models.load_model(model_path, custom_objects=create_custom_objects())

model.evaluate(X_test, y_test) # or model.predict
0 голосов
/ 18 марта 2019

В соответствии с ссылкой, которой вы поделились, ваша модель имеет явно определенный слой AttentionWithContext (), добавленный в модель.Когда вы пытаетесь загрузить модель, используя keras 'load_model, метод выдает ошибку, потому что этот слой не встроен в keras, и для решения этой проблемы вам, возможно, придется снова определить этот слой в своем коде, прежде чем загружать модель с помощью load_model.Пожалуйста, попробуйте написать класс AttentionWithContext (layer) так, как он есть в предоставленной вами ссылке (https://www.kaggle.com/hsankesara/news-classification-using-han/notebook), прежде чем пытаться загрузить модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...