Skip to content

Commit 891fa2a

Browse files
author
Helin Wang
committed
Add 4 non-fault-tolerant demos
1 parent 73ade55 commit 891fa2a

File tree

4 files changed

+685
-21
lines changed

4 files changed

+685
-21
lines changed

demo/fit_a_line/train.py

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
import paddle.v2.dataset as dataset
33
import os
44
import gzip
5-
import glob
6-
import recordio
7-
import cPickle as pickle
85

96
#PaddleCloud cached the dataset on /pfs/${DATACENTER}/public/dataset/...
107
dc = os.getenv("PADDLE_CLOUD_CURRENT_DATACENTER")
@@ -13,26 +10,30 @@
1310
trainer_id = int(os.getenv("PADDLE_INIT_TRAINER_ID"))
1411
trainer_count = int(os.getenv("PADDLE_INIT_NUM_GRADIENT_SERVERS"))
1512

16-
def recordio_reader_creator(path):
17-
files = glob.glob(path)
18-
files.sort()
19-
flie_count = len(files)
20-
files_current_train = []
13+
# TODO(helin): remove this once paddle.v2.reader.creator.recordio is
14+
# fixed.
15+
def recordio(paths, buf_size=100):
16+
"""
17+
Creates a data reader from given RecordIO file paths separated by ",",
18+
glob pattern is supported.
19+
:path: path of recordio files.
20+
:returns: data reader of recordio files.
21+
"""
2122

22-
for idx, fn in enumerate(files):
23-
if idx % trainer_count == trainer_id:
24-
files_current_train.append(fn)
23+
import recordio as rec
24+
import paddle.v2.reader.decorator as dec
25+
import cPickle as pickle
2526

2627
def reader():
27-
for fn in files_current_train:
28-
reader = recordio.reader(fn)
29-
while True:
30-
r = reader.read()
31-
if r is None:
32-
break
33-
yield pickle.loads(r)
34-
reader.close()
35-
return reader
28+
f = rec.reader(paths)
29+
while True:
30+
r = f.read()
31+
if r is None:
32+
break
33+
yield pickle.loads(r)
34+
f.close()
35+
36+
return dec.buffered(reader, buf_size)
3637

3738
def main():
3839
# init
@@ -74,7 +75,7 @@ def event_handler(event):
7475
# training
7576
trainer.train(
7677
reader=paddle.batch(
77-
paddle.reader.shuffle(recordio_reader_creator("/pfs/dlnel/public/dataset/uci_housing/uci_housing_train*"), buf_size=500),
78+
paddle.reader.shuffle(recordio("/pfs/dlnel/public/dataset/uci_housing/uci_housing_train*"), buf_size=500),
7879
batch_size=2),
7980
feeding=feeding,
8081
event_handler=event_handler,

demo/label_semantic_roles/train.py

Lines changed: 249 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
1+
import os
2+
import math
3+
import numpy as np
4+
import paddle.v2 as paddle
5+
import paddle.v2.dataset.conll05 as conll05
6+
import paddle.v2.evaluator as evaluator
7+
8+
word_dict, verb_dict, label_dict = conll05.get_dict()
9+
word_dict_len = len(word_dict)
10+
label_dict_len = len(label_dict)
11+
pred_len = len(verb_dict)
12+
13+
mark_dict_len = 2
14+
word_dim = 32
15+
mark_dim = 5
16+
hidden_dim = 512
17+
depth = 8
18+
default_std = 1 / math.sqrt(hidden_dim) / 3.0
19+
mix_hidden_lr = 1e-3
20+
21+
# TODO(helin): remove this once paddle.v2.reader.creator.recordio is
22+
# fixed.
23+
def recordio(paths, buf_size=100):
24+
"""
25+
Creates a data reader from given RecordIO file paths separated by ",",
26+
glob pattern is supported.
27+
:path: path of recordio files.
28+
:returns: data reader of recordio files.
29+
"""
30+
31+
import recordio as rec
32+
import paddle.v2.reader.decorator as dec
33+
import cPickle as pickle
34+
35+
def reader():
36+
f = rec.reader(paths)
37+
while True:
38+
r = f.read()
39+
if r is None:
40+
break
41+
yield pickle.loads(r)
42+
f.close()
43+
44+
return dec.buffered(reader, buf_size)
45+
46+
def d_type(size):
47+
return paddle.data_type.integer_value_sequence(size)
48+
49+
50+
def db_lstm():
51+
#8 features
52+
word = paddle.layer.data(name='word_data', type=d_type(word_dict_len))
53+
predicate = paddle.layer.data(name='verb_data', type=d_type(pred_len))
54+
55+
ctx_n2 = paddle.layer.data(name='ctx_n2_data', type=d_type(word_dict_len))
56+
ctx_n1 = paddle.layer.data(name='ctx_n1_data', type=d_type(word_dict_len))
57+
ctx_0 = paddle.layer.data(name='ctx_0_data', type=d_type(word_dict_len))
58+
ctx_p1 = paddle.layer.data(name='ctx_p1_data', type=d_type(word_dict_len))
59+
ctx_p2 = paddle.layer.data(name='ctx_p2_data', type=d_type(word_dict_len))
60+
mark = paddle.layer.data(name='mark_data', type=d_type(mark_dict_len))
61+
62+
emb_para = paddle.attr.Param(name='emb', initial_std=0., is_static=True)
63+
std_0 = paddle.attr.Param(initial_std=0.)
64+
std_default = paddle.attr.Param(initial_std=default_std)
65+
66+
predicate_embedding = paddle.layer.embedding(
67+
size=word_dim,
68+
input=predicate,
69+
param_attr=paddle.attr.Param(name='vemb', initial_std=default_std))
70+
mark_embedding = paddle.layer.embedding(
71+
size=mark_dim, input=mark, param_attr=std_0)
72+
73+
word_input = [word, ctx_n2, ctx_n1, ctx_0, ctx_p1, ctx_p2]
74+
emb_layers = [
75+
paddle.layer.embedding(size=word_dim, input=x, param_attr=emb_para)
76+
for x in word_input
77+
]
78+
emb_layers.append(predicate_embedding)
79+
emb_layers.append(mark_embedding)
80+
81+
hidden_0 = paddle.layer.mixed(
82+
size=hidden_dim,
83+
bias_attr=std_default,
84+
input=[
85+
paddle.layer.full_matrix_projection(
86+
input=emb, param_attr=std_default) for emb in emb_layers
87+
])
88+
89+
lstm_para_attr = paddle.attr.Param(initial_std=0.0, learning_rate=1.0)
90+
hidden_para_attr = paddle.attr.Param(
91+
initial_std=default_std, learning_rate=mix_hidden_lr)
92+
93+
lstm_0 = paddle.layer.lstmemory(
94+
input=hidden_0,
95+
act=paddle.activation.Relu(),
96+
gate_act=paddle.activation.Sigmoid(),
97+
state_act=paddle.activation.Sigmoid(),
98+
bias_attr=std_0,
99+
param_attr=lstm_para_attr)
100+
101+
#stack L-LSTM and R-LSTM with direct edges
102+
input_tmp = [hidden_0, lstm_0]
103+
104+
for i in range(1, depth):
105+
mix_hidden = paddle.layer.mixed(
106+
size=hidden_dim,
107+
bias_attr=std_default,
108+
input=[
109+
paddle.layer.full_matrix_projection(
110+
input=input_tmp[0], param_attr=hidden_para_attr),
111+
paddle.layer.full_matrix_projection(
112+
input=input_tmp[1], param_attr=lstm_para_attr)
113+
])
114+
115+
lstm = paddle.layer.lstmemory(
116+
input=mix_hidden,
117+
act=paddle.activation.Relu(),
118+
gate_act=paddle.activation.Sigmoid(),
119+
state_act=paddle.activation.Sigmoid(),
120+
reverse=((i % 2) == 1),
121+
bias_attr=std_0,
122+
param_attr=lstm_para_attr)
123+
124+
input_tmp = [mix_hidden, lstm]
125+
126+
feature_out = paddle.layer.mixed(
127+
size=label_dict_len,
128+
bias_attr=std_default,
129+
input=[
130+
paddle.layer.full_matrix_projection(
131+
input=input_tmp[0], param_attr=hidden_para_attr),
132+
paddle.layer.full_matrix_projection(
133+
input=input_tmp[1], param_attr=lstm_para_attr)
134+
], )
135+
136+
return feature_out
137+
138+
139+
def load_parameter(file_name, h, w):
140+
with open(file_name, 'rb') as f:
141+
f.read(16) # skip header.
142+
return np.fromfile(f, dtype=np.float32).reshape(h, w)
143+
144+
145+
def main():
146+
paddle.init()
147+
148+
# define network topology
149+
feature_out = db_lstm()
150+
target = paddle.layer.data(name='target', type=d_type(label_dict_len))
151+
crf_cost = paddle.layer.crf(
152+
size=label_dict_len,
153+
input=feature_out,
154+
label=target,
155+
param_attr=paddle.attr.Param(
156+
name='crfw', initial_std=default_std, learning_rate=mix_hidden_lr))
157+
158+
crf_dec = paddle.layer.crf_decoding(
159+
size=label_dict_len,
160+
input=feature_out,
161+
label=target,
162+
param_attr=paddle.attr.Param(name='crfw'))
163+
evaluator.sum(input=crf_dec)
164+
165+
# create parameters
166+
parameters = paddle.parameters.create(crf_cost)
167+
parameters.set('emb', load_parameter(conll05.get_embedding(), 44068, 32))
168+
169+
# create optimizer
170+
optimizer = paddle.optimizer.Momentum(
171+
momentum=0,
172+
learning_rate=2e-2,
173+
regularization=paddle.optimizer.L2Regularization(rate=8e-4),
174+
model_average=paddle.optimizer.ModelAverage(
175+
average_window=0.5, max_average_window=10000), )
176+
177+
trainer = paddle.trainer.SGD(
178+
cost=crf_cost,
179+
parameters=parameters,
180+
update_equation=optimizer,
181+
extra_layers=crf_dec)
182+
183+
reader = paddle.batch(
184+
paddle.reader.shuffle(recordio("/pfs/dlnel/public/dataset/conll05/conl105_train-*"), buf_size=8192), batch_size=10)
185+
reader_test = paddle.batch(
186+
paddle.reader.shuffle(recordio("/pfs/dlnel/public/dataset/conll05/conl105_test-*"), buf_size=50), batch_size=10)
187+
188+
feeding = {
189+
'word_data': 0,
190+
'ctx_n2_data': 1,
191+
'ctx_n1_data': 2,
192+
'ctx_0_data': 3,
193+
'ctx_p1_data': 4,
194+
'ctx_p2_data': 5,
195+
'verb_data': 6,
196+
'mark_data': 7,
197+
'target': 8
198+
}
199+
200+
def event_handler(event):
201+
if isinstance(event, paddle.event.EndIteration):
202+
if event.batch_id % 100 == 0:
203+
print "Pass %d, Batch %d, Cost %f, %s" % (
204+
event.pass_id, event.batch_id, event.cost, event.metrics)
205+
if event.batch_id % 1000 == 0:
206+
result = trainer.test(reader=reader, feeding=feeding)
207+
print "\nTest with Pass %d, Batch %d, %s" % (
208+
event.pass_id, event.batch_id, result.metrics)
209+
210+
if isinstance(event, paddle.event.EndPass):
211+
# save parameters
212+
with open('params_pass_%d.tar' % event.pass_id, 'w') as f:
213+
parameters.to_tar(f)
214+
215+
result = trainer.test(reader=reader_test, feeding=feeding)
216+
print "\nTest with Pass %d, %s" % (event.pass_id, result.metrics)
217+
218+
trainer.train(
219+
reader=reader,
220+
event_handler=event_handler,
221+
num_passes=1,
222+
feeding=feeding)
223+
224+
test_creator = paddle.dataset.conll05.test()
225+
test_data = []
226+
for item in test_creator():
227+
test_data.append(item[0:8])
228+
if len(test_data) == 1:
229+
break
230+
231+
predict = paddle.layer.crf_decoding(
232+
size=label_dict_len,
233+
input=feature_out,
234+
param_attr=paddle.attr.Param(name='crfw'))
235+
probs = paddle.infer(
236+
output_layer=predict,
237+
parameters=parameters,
238+
input=test_data,
239+
field='id')
240+
assert len(probs) == len(test_data[0][0])
241+
labels_reverse = {}
242+
for (k, v) in label_dict.items():
243+
labels_reverse[v] = k
244+
pre_lab = [labels_reverse[i] for i in probs]
245+
print pre_lab
246+
247+
248+
if __name__ == '__main__':
249+
main()

0 commit comments

Comments
 (0)