Почему Paddle выбрасывает ошибки при подаче в dens_vector_sequence модели SeqToseq?

Я пытаюсь использовать paddle-paddle ( https://github.com/baidu/Paddle), чтобы обучить последовательность (кодер-декодер) модели последовательности для маркировки POS.

Но вместо использования одноразового встраивания индексов слов в качестве входных данных, я бы использовал воображаемые векторы слов, которые я создал, используя numpy, Я добавил векторы слов к settings переменная в hook() функция dataprovider.py:

def hook(settings, src_dict, trg_dict, file_list, **kwargs):
    # job_mode = 1: training mode
    # job_mode = 0: generating mode
    settings.job_mode = trg_dict is not None
    settings.src_dict = src_dict
    settings.logger.info("src dict len : %d" % (len(settings.src_dict)))
    settings.sample_count = 0
    settings.thematrix = np.random.rand(len(src_dict), len(trg_dict))
    if settings.job_mode:
        settings.trg_dict = trg_dict
        settings.slots = [
            #integer_value_sequence(len(settings.src_dict)),
            dense_vector_sequence(len(settings.src_dict)),
            integer_value_sequence(len(settings.trg_dict)),
            integer_value_sequence(len(settings.trg_dict)),
        ]
        settings.logger.info("trg dict len : %d" % (len(settings.trg_dict)))
    else:
        settings.slots = [
            integer_value_sequence(len(settings.src_dict)),
            integer_value_sequence(len(open(file_list[0], "r").readlines()))
        ]

И, перебирая предложения и их POS-теги, я получил эти мнимые векторы вместо индексов слов по адресу https://github.com/alvations/rowrow/blob/master/dataprovider.py

Внутри последовательности к модели последовательности, так как вход (ака data_layer()) не является горячим вложением, я бы не использовал слой внедрения, чтобы обернуть вокруг горячего вектора. Но вместо этого я буду использовать полностью подключенный слой, чтобы втиснуть векторные входы в размер кодера, т.е. https://github.com/alvations/rowrow/blob/master/seqToseq_net.py:

src_word_id = data_layer(name='source_language_word', size=source_dict_dim)
src_embedding = fc_layer(input=src_word_id, size=word_vector_dim)   
src_forward = simple_gru(input=src_embedding, size=encoder_size)
src_backward = simple_gru(input=src_embedding, size=encoder_size, reverse=True)
encoded_vector = concat_layer(input=[src_forward, src_backward])
with mixed_layer(size=decoder_size) as encoded_proj:
    encoded_proj += full_matrix_projection(input=encoded_vector)

Обычно слой внедрения будет выглядеть примерно так:

src_embedding = embedding_layer(
    input=src_word_id,
    size=word_vector_dim,
    param_attr=ParamAttr(name='_source_language_embedding'))

График вычислений нейронной сети, по-видимому, правильный, так как при запуске train.sh,

Но выдает ошибку при получении следующего пакета:

~/Paddle/demo/rowrow$ bash train.sh 
I1104 18:59:42.636052 18632 Util.cpp:151] commandline: /home/ltan/Paddle/binary/bin/../opt/paddle/bin/paddle_trainer --config=train.conf --save_dir=/home/ltan/Paddle/demo/rowrow/model --use_gpu=true --num_passes=100 --show_parameter_stats_period=1000 --trainer_count=4 --log_period=10 --dot_period=5 
I1104 18:59:46.503566 18632 Util.cpp:126] Calling runInitFunctions
I1104 18:59:46.503810 18632 Util.cpp:139] Call runInitFunctions done.
[WARNING 2016-11-04 18:59:46,847 default_decorators.py:40] please use keyword arguments in paddle config.
[INFO 2016-11-04 18:59:46,856 networks.py:1125] The input order is [source_language_word, target_language_word, target_language_next_word]
[INFO 2016-11-04 18:59:46,857 networks.py:1132] The output order is [__cost_0__]
I1104 18:59:46.871026 18632 Trainer.cpp:170] trainer mode: Normal
I1104 18:59:46.871906 18632 MultiGradientMachine.cpp:108] numLogicalDevices=1 numThreads=4 numDevices=4
I1104 18:59:46.988584 18632 PyDataProvider2.cpp:247] loading dataprovider dataprovider::process
[INFO 2016-11-04 18:59:46,990 dataprovider.py:15] src dict len : 45661
[INFO 2016-11-04 18:59:47,316 dataprovider.py:26] trg dict len : 422
I1104 18:59:47.347944 18632 PyDataProvider2.cpp:247] loading dataprovider dataprovider::process
[INFO 2016-11-04 18:59:47,348 dataprovider.py:15] src dict len : 45661
[INFO 2016-11-04 18:59:47,657 dataprovider.py:26] trg dict len : 422
I1104 18:59:47.658279 18632 GradientMachine.cpp:134] Initing parameters..
I1104 18:59:49.244287 18632 GradientMachine.cpp:141] Init parameters done.
F1104 18:59:50.485621 18632 PythonUtil.h:213] Check failed: PySequence_Check(seq_) 
*** Check failure stack trace: ***
    @     0x7f71f521adaa  (unknown)
    @     0x7f71f521ace4  (unknown)
    @     0x7f71f521a6e6  (unknown)
    @     0x7f71f521d687  (unknown)
    @           0x54dac9  paddle::DenseScanner::fill()
    @           0x54f1d1  paddle::SequenceScanner::fill()
    @           0x5543cc  paddle::PyDataProvider2::getNextBatchInternal()
    @           0x5779b2  paddle::DataProvider::getNextBatch()
    @           0x6a01f7  paddle::Trainer::trainOnePass()
    @           0x6a3b57  paddle::Trainer::train()
    @           0x53a2b3  main
    @     0x7f71f4426f45  (unknown)
    @           0x545ae5  (unknown)
    @              (nil)  (unknown)
/home/ltan/Paddle/binary/bin/paddle: line 81: 18632 Aborted                 (core dumped) ${DEBUGGER} $MYDIR/../opt/paddle/bin/paddle_trainer ${@:2}

Я пытался спросить gitter.im Пэддла, но ответа нет.

Кто-нибудь знает:

  • что означает ошибка?
  • Как передать плотную векторную последовательность в модель seqToseq в Paddle?
  • Почему Пэддл выдает эту ошибку при подаче в dens_vector_sequence модели SeqToseq?

0 ответов

Другие вопросы по тегам