test_cross_entropy_over_beam.py 1.5 KB
Newer Older
C
caoying03 已提交
1 2 3 4 5 6 7 8 9
#!/usr/bin/env python
#coding=utf-8

from paddle.trainer_config_helpers import *
beam_size = 5

# the first beam expansion.
sentence_states = data_layer(name="sentence_states", size=32)
sentence_scores = data_layer(name="sentence_scores", size=1)
10
topk_sentence_ids = kmax_seq_score_layer(
C
caoying03 已提交
11 12 13 14 15 16
    input=sentence_scores, beam_size=beam_size)

# the second beam expansion.
topk_sen = sub_nested_seq_layer(
    input=sentence_states, selected_indices=topk_sentence_ids)
start_pos_scores = fc_layer(input=topk_sen, size=1, act=LinearActivation())
17
topk_start_pos_ids = kmax_seq_score_layer(
C
caoying03 已提交
18 19 20 21 22 23 24
    input=sentence_scores, beam_size=beam_size)

# the final beam expansion.
topk_start_spans = seq_slice_layer(
    input=topk_sen, starts=topk_start_pos_ids, ends=None)
end_pos_scores = fc_layer(
    input=topk_start_spans, size=1, act=LinearActivation())
25
topk_end_pos_ids = kmax_seq_score_layer(
C
caoying03 已提交
26 27 28 29 30 31
    input=end_pos_scores, beam_size=beam_size)

# define the cost
sentence_idx = data_layer(name="sentences_ids", size=1)
start_idx = data_layer(name="start_ids", size=1)
end_idx = data_layer(name="end_ids", size=1)
C
caoying03 已提交
32 33 34 35 36 37 38 39 40 41 42 43
cost = cross_entropy_over_beam(input=[
    BeamInput(
        candidate_scores=sentence_scores,
        selected_candidates=topk_sentence_ids,
        gold=sentence_idx), BeamInput(
            candidate_scores=start_pos_scores,
            selected_candidates=topk_start_pos_ids,
            gold=start_idx), BeamInput(
                candidate_scores=end_pos_scores,
                selected_candidates=topk_end_pos_ids,
                gold=end_idx)
])
C
caoying03 已提交
44 45

outputs(cost)