api_train_v2.py 2.5 KB
Newer Older
Q
qiaolongfei 已提交
1
import paddle.v2 as paddle
Y
Yu Yang 已提交
2
import cPickle
Q
qiaolongfei 已提交
3

Y
Yu Yang 已提交
4 5

def main():
Y
Yu Yang 已提交
6
    paddle.init(use_gpu=False, trainer_count=1)
Q
qiaolongfei 已提交
7 8

    # define network topology
9 10 11 12
    images = paddle.layer.data(
        name='pixel', type=paddle.data_type.dense_vector(784))
    label = paddle.layer.data(
        name='label', type=paddle.data_type.integer_value(10))
Q
qiaolongfei 已提交
13 14 15 16 17 18 19
    hidden1 = paddle.layer.fc(input=images, size=200)
    hidden2 = paddle.layer.fc(input=hidden1, size=200)
    inference = paddle.layer.fc(input=hidden2,
                                size=10,
                                act=paddle.activation.Softmax())
    cost = paddle.layer.classification_cost(input=inference, label=label)

Y
Yu Yang 已提交
20 21 22 23 24
    try:
        with open('params.pkl', 'r') as f:
            parameters = cPickle.load(f)
    except IOError:
        parameters = paddle.parameters.create(cost)
Y
Yu Yang 已提交
25

Q
qiaolongfei 已提交
26
    adam_optimizer = paddle.optimizer.Adam(learning_rate=0.01)
Y
Yu Yang 已提交
27

Y
Yu Yang 已提交
28
    trainer = paddle.trainer.SGD(cost=cost,
Y
Yu Yang 已提交
29 30 31
                                 parameters=parameters,
                                 update_equation=adam_optimizer)

Y
Yu Yang 已提交
32
    def event_handler(event):
Y
Yu Yang 已提交
33
        if isinstance(event, paddle.event.EndIteration):
Y
Yu Yang 已提交
34 35
            if event.batch_id % 1000 == 0:
                result = trainer.test(reader=paddle.reader.batched(
Y
Yu Yang 已提交
36
                    paddle.dataset.mnist.test(), batch_size=256))
Y
Yu Yang 已提交
37

Y
Yu Yang 已提交
38 39 40 41 42
                print "Pass %d, Batch %d, Cost %.2f, %s, " \
                      "Testing cost %.2f metrics %s" % (
                          event.pass_id, event.batch_id, event.cost,
                          event.metrics,
                          result.cost, result.metrics)
Y
Yu Yang 已提交
43

Y
Yu Yang 已提交
44 45 46
                with open('params.pkl', 'w') as f:
                    cPickle.dump(
                        parameters, f, protocol=cPickle.HIGHEST_PROTOCOL)
Y
Yu Yang 已提交
47 48
        else:
            pass
49

Y
Yu Yang 已提交
50
    trainer.train(
Y
Yu Yang 已提交
51
        reader=paddle.reader.batched(
Y
Yu Yang 已提交
52
            paddle.reader.shuffle(
Y
Yu Yang 已提交
53
                paddle.dataset.mnist.train(), buf_size=8192),
Y
Yu Yang 已提交
54 55
            batch_size=32),
        event_handler=event_handler)
Y
Yu Yang 已提交
56

Y
Yu Yang 已提交
57 58 59 60 61 62
    # output is a softmax layer. It returns probabilities.
    # Shape should be (100, 10)
    probs = paddle.infer(
        output=inference,
        parameters=parameters,
        reader=paddle.reader.batched(
Y
Yu Yang 已提交
63
            paddle.reader.firstn(
Y
Yu Yang 已提交
64 65
                paddle.reader.map_readers(lambda item: (item[0], ),
                                          paddle.dataset.mnist.test()),
Y
Yu Yang 已提交
66
                n=100),
Y
Yu Yang 已提交
67 68 69
            batch_size=32))
    print probs.shape

Y
Yu Yang 已提交
70 71 72

if __name__ == '__main__':
    main()