|
|
|
@ -80,21 +80,6 @@ def encoder_decoder():
|
|
|
|
|
return rnn()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def to_lodtensor(data, place):
|
|
|
|
|
seq_lens = [len(seq) for seq in data]
|
|
|
|
|
cur_len = 0
|
|
|
|
|
lod = [cur_len]
|
|
|
|
|
for l in seq_lens:
|
|
|
|
|
cur_len += l
|
|
|
|
|
lod.append(cur_len)
|
|
|
|
|
flattened_data = np.concatenate(data, axis=0).astype("int64")
|
|
|
|
|
flattened_data = flattened_data.reshape([len(flattened_data), 1])
|
|
|
|
|
res = core.LoDTensor()
|
|
|
|
|
res.set(flattened_data, place)
|
|
|
|
|
res.set_lod([lod])
|
|
|
|
|
return res
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
|
rnn_out = encoder_decoder()
|
|
|
|
|
label = layers.data(
|
|
|
|
@ -122,18 +107,21 @@ def main():
|
|
|
|
|
|
|
|
|
|
exe.run(framework.default_startup_program())
|
|
|
|
|
|
|
|
|
|
feed_order = [
|
|
|
|
|
'src_word_id', 'target_language_word', 'target_language_next_word'
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
feed_list = [
|
|
|
|
|
fluid.default_main_program().global_block().var(var_name)
|
|
|
|
|
for var_name in feed_order
|
|
|
|
|
]
|
|
|
|
|
feeder = fluid.DataFeeder(feed_list, place)
|
|
|
|
|
|
|
|
|
|
batch_id = 0
|
|
|
|
|
for pass_id in xrange(10):
|
|
|
|
|
for data in train_data():
|
|
|
|
|
word_data = to_lodtensor(map(lambda x: x[0], data), place)
|
|
|
|
|
trg_word = to_lodtensor(map(lambda x: x[1], data), place)
|
|
|
|
|
trg_word_next = to_lodtensor(map(lambda x: x[2], data), place)
|
|
|
|
|
outs = exe.run(fluid.default_main_program(),
|
|
|
|
|
feed={
|
|
|
|
|
'src_word_id': word_data,
|
|
|
|
|
'target_language_word': trg_word,
|
|
|
|
|
'target_language_next_word': trg_word_next
|
|
|
|
|
},
|
|
|
|
|
feed=feeder.feed(data),
|
|
|
|
|
fetch_list=[avg_cost])
|
|
|
|
|
avg_cost_val = np.array(outs[0])
|
|
|
|
|
print('pass_id=' + str(pass_id) + ' batch=' + str(batch_id) +
|
|
|
|
|