Как загрузить матрицу для изменения уровня внимания в seqToseq demo? — Paddle

#python #matrix #deep-learning #paddle-paddle #attention-model

#python #матрица #глубокое обучение #paddle-весло #внимание-модель

Вопрос:

При попытке повторить раздел 3.1 при включении лексики дискретного перевода в нейронный MT в paddle-paddle

Я пытался создать статическую матрицу, которую мне нужно будет загрузить в seqToseq конвейер обучения, например:

 >>> import numpy as np
>>> x = np.random.rand(3,2)  
>>> x
array([[ 0.64077103,  0.03278357],
       [ 0.47133411,  0.16309775],
       [ 0.63986919,  0.07130613]])
# where there is 3 target words and 2 source words, 
# and each cell in the matrix represents some co-occurrence probabilities.
 

С seqToseq_net демонстрацией эту матрицу нужно будет умножить на вывод уровня внимания в gru_decoder_with_attention . Исходная демонстрация:

 def gru_decoder_with_attention(enc_vec, enc_proj, current_word):
    decoder_mem = memory(name='gru_decoder',
                         size=decoder_size,
                         boot_layer=decoder_boot)

    # This attention context layer would have been 
    # a vector of size |src_vocab| x 1
    context = simple_attention(encoded_sequence=enc_vec,
                               encoded_proj=enc_proj,
                               decoder_state=decoder_mem, )

    with mixed_layer(size=decoder_size * 3) as decoder_inputs:
        decoder_inputs  = full_matrix_projection(input=context)
        decoder_inputs  = full_matrix_projection(input=current_word)

    gru_step = gru_step_layer(name='gru_decoder',
                              input=decoder_inputs,
                              output_mem=decoder_mem,
                              size=decoder_size)

    with mixed_layer(size=target_dict_dim,
                     bias_attr=True,
                     act=SoftmaxActivation()) as out:
        out  = full_matrix_projection(input=gru_step)
    return out
 

Цель состоит в том, чтобы повлиять на уровень внимания, умножив его на статическую матрицу:

 def gru_decoder_with_attention(enc_vec, enc_proj, current_word):
    decoder_mem = memory(name='gru_decoder',
                         size=decoder_size,
                         boot_layer=decoder_boot)

    # This attention context layer would have been 
    # of size |src_vocab| x 1
    context = simple_attention(encoded_sequence=enc_vec,
                               encoded_proj=enc_proj,
                               decoder_state=decoder_mem, )

    # This static matrix layer, x, would have been
    # of size |trg_vocab| x |src_vocab|
    static_matrix = some_sort_of_layer(x)

    # This should yield a vector of size
    # |trg_vocab| x 1
    static_matrix_multiply_context = some_sort_of_operation_layer( static_matrix, context)

    with mixed_layer(size=decoder_size * 3) as decoder_inputs:
        # 
        decoder_inputs  = full_matrix_projection(input= static_matrix_multiply_context)
        decoder_inputs  = full_matrix_projection(input=current_word)
 

Я попытался просмотреть код Paddle/python/trainer_config_helps и прошелся по всему демонстрационному коду, а также задал вопрос о gitter от PaddlePaddle. Но я не могу найти, как я могу загрузить настроенную статическую матрицу, которую не нужно обновлять в процессе обучения, и взаимодействовать с одним из слоев Paddle.

Как загрузить матрицу для изменения уровня внимания в seqToseq demo?

Что должно some_sort_of_layer быть и some_sort_of_operation_layer быть в приведенном выше примере?