api_train_v2.py 2.1 KB
Newer Older
Y
Yu Yang 已提交
1
import numpy
Q
qiaolongfei 已提交
2 3 4
import paddle.v2 as paddle
from paddle.trainer.PyDataProvider2 import dense_vector, integer_value

Y
Yu Yang 已提交
5 6 7 8 9 10 11 12 13 14 15
import mnist_util


def train_reader():
    train_file = './data/raw_data/train'
    generator = mnist_util.read_from_mnist(train_file)
    for item in generator:
        yield item


def main():
Y
Yu Yang 已提交
16
    paddle.init(use_gpu=False, trainer_count=1)
Q
qiaolongfei 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29

    # define network topology
    images = paddle.layer.data(name='pixel', size=784)
    label = paddle.layer.data(name='label', size=10)
    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)

    topology = paddle.layer.parse_network(cost)
    print topology
Y
Yu Yang 已提交
30
    parameters = paddle.parameters.create(topology)
Y
Yu Yang 已提交
31
    for param_name in parameters.keys():
Y
Yu Yang 已提交
32
        array = parameters.get(param_name)
Y
Yu Yang 已提交
33
        array[:] = numpy.random.uniform(low=-1.0, high=1.0, size=array.shape)
Y
Yu Yang 已提交
34
        parameters.set(parameter_name=param_name, value=array)
Y
Yu Yang 已提交
35

Q
qiaolongfei 已提交
36
    adam_optimizer = paddle.optimizer.Adam(learning_rate=0.01)
Y
Yu Yang 已提交
37 38

    def event_handler(event):
Y
Yu Yang 已提交
39
        if isinstance(event, paddle.event.EndIteration):
Q
qiaolongfei 已提交
40
            para = parameters.get('___fc_2__.w0')
Y
Yu Yang 已提交
41 42
            print "Pass %d, Batch %d, Cost %f, Weight Mean Of Fc 2 is %f" % (
                event.pass_id, event.batch_id, event.cost, para.mean())
Y
Yu Yang 已提交
43

Y
Yu Yang 已提交
44 45
        else:
            pass
46

Y
Yu Yang 已提交
47
    trainer = paddle.trainer.SGD(update_equation=adam_optimizer)
Y
Yu Yang 已提交
48 49

    trainer.train(train_data_reader=train_reader,
Y
Yu Yang 已提交
50
                  topology=topology,
Y
Yu Yang 已提交
51
                  parameters=parameters,
Y
Yu Yang 已提交
52 53 54 55 56 57 58 59 60 61 62
                  event_handler=event_handler,
                  batch_size=32,  # batch size should be refactor in Data reader
                  data_types={  # data_types will be removed, It should be in
                      # network topology
                      'pixel': dense_vector(784),
                      'label': integer_value(10)
                  })


if __name__ == '__main__':
    main()