Как загрузить матрицу для изменения слоя внимания в демке seqToseq? - Весло
При попытке воспроизвести раздел 3.1 " Включение лексиконов дискретного перевода в Neural 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. Но я не могу найти, как я могу загрузить настроенную статическую матрицу, которую не нужно обновлять в процессе обучения, и взаимодействовать с одним из слоев Паддла.
Как загрузить матрицу для изменения слоя внимания в демке seqToseq?
Что должноsome_sort_of_layer
а такжеsome_sort_of_operation_layer
быть в приведенном выше примере?