Загрузка модели LSTM, приводящая к странным результатам, ошибка несериализуемых аргументов ключевого слова - PullRequest
0 голосов
/ 30 января 2019

Я строю модель LSTM с вниманием, она хорошо тренируется и тестирует в одном сеансе.У меня возникают проблемы с сохранением и загрузкой модели в другом сеансе.

Проблема 1) При сохранении модели с помощью model.save('my_model.h5') появляется странное предупреждение:

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/keras/engine/network.py:872: UserWarning: Layer lstm_1 was passed non-serializable keyword arguments: {'initial_state': [<tf.Tensor 's0:0' shape=(?, 128) dtype=float32>, <tf.Tensor 'c0:0' shape=(?, 128) dtype=float32>]}. They will not be included in the serialized model (and thus will be missing at deserialization time).
  '. They will not be included '

Проблема 2) При загрузке моей модели с model = load_model('my_model.h5'), во время теста выдает ужасно неточные результаты.

Я пытался сохранить веса с помощью model.save_weights и перезагрузить их с помощью mode.load_weights, но безрезультатно.

Что происходит?

ОБНОВЛЕНИЕ:

def model(Tx, Ty, n_a, n_s, human_vocab_size, machine_vocab_size):

    X = Input(shape=(Tx, human_vocab_size))
    s0 = Input(shape=(n_s,), name='s0')
    c0 = Input(shape=(n_s,), name='c0')
    s = s0
    c = c0

    # Initialize empty list of outputs
    outputs = []

    ### START CODE HERE ###

    # Step 1: Define your pre-attention Bi-LSTM. Remember to use return_sequences=True. (≈ 1 line)
    a = Bidirectional(LSTM(n_a, return_sequences=True))(X)

    # Step 2: Iterate for Ty steps
    for t in range(Ty):

        # Step 2.A: Perform one step of the attention mechanism to get back the context vector at step t (≈ 1 line)
        context = one_step_attention(a, s)

        # Step 2.B: Apply the post-attention LSTM cell to the "context" vector.
        # Don't forget to pass: initial_state = [hidden state, cell state] (≈ 1 line)
        s, _, c = post_activation_LSTM_cell(context, initial_state = [s, c])

        # Step 2.C: Apply Dense layer to the hidden state output of the post-attention LSTM (≈ 1 line)
        out = output_layer(s)

        # Step 2.D: Append "out" to the "outputs" list (≈ 1 line)
        outputs.append(out)

    # Step 3: Create model instance taking three inputs and returning the list of outputs. (≈ 1 line)
    model = Model(inputs = [X, s0, c0], outputs = outputs)

    ### END CODE HERE ###

    return model

1 Ответ

0 голосов
/ 30 января 2019

Существует проблема на github, описывающая эту проблему.

Здесь она была решена путем описания модели, которая сохраняется по-другому.В этом посте они описывают, что это может быть потому, что вы сохраняете состояние, которое известно только во время обучения, но не может быть восстановлено во время загрузки.Это пока оно не будет сохранено и ваша проблема 1. возникнет.И это приводит к проблеме 2.

...