From fa285a9d29701c24ade67da3eeb293b37eb2efb9 Mon Sep 17 00:00:00 2001 From: Yang Yu Date: Wed, 24 Jan 2018 15:23:38 +0800 Subject: [PATCH] Fit a line with parallel.do --- .../tests/book/test_fit_a_line_parallel_do.py | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 python/paddle/v2/fluid/tests/book/test_fit_a_line_parallel_do.py diff --git a/python/paddle/v2/fluid/tests/book/test_fit_a_line_parallel_do.py b/python/paddle/v2/fluid/tests/book/test_fit_a_line_parallel_do.py new file mode 100644 index 000000000..9693b26d5 --- /dev/null +++ b/python/paddle/v2/fluid/tests/book/test_fit_a_line_parallel_do.py @@ -0,0 +1,57 @@ +# Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import paddle.v2 as paddle +import paddle.v2.fluid as fluid + +x = fluid.layers.data(name='x', shape=[13], dtype='float32') +y = fluid.layers.data(name='y', shape=[1], dtype='float32') + +places = fluid.layers.get_places() +pd = fluid.layers.ParallelDo(places=places) +with pd.do(): + x_ = pd.read_input(x) + y_ = pd.read_input(y) + y_predict = fluid.layers.fc(input=x_, size=1, act=None) + cost = fluid.layers.square_error_cost(input=y_predict, label=y_) + pd.write_output(fluid.layers.mean(x=cost)) + +avg_cost = fluid.layers.mean(x=pd()) + +sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001) +sgd_optimizer.minimize(avg_cost) + +BATCH_SIZE = 20 + +train_reader = paddle.batch( + paddle.reader.shuffle( + paddle.dataset.uci_housing.train(), buf_size=500), + batch_size=BATCH_SIZE) + +place = fluid.CPUPlace() +feeder = fluid.DataFeeder(place=place, feed_list=[x, y]) +exe = fluid.Executor(place) + +exe.run(fluid.default_startup_program()) + +PASS_NUM = 100 +for pass_id in range(PASS_NUM): + for data in train_reader(): + avg_loss_value, = exe.run(fluid.default_main_program(), + feed=feeder.feed(data), + fetch_list=[avg_cost]) + print(avg_loss_value) + if avg_loss_value[0] < 10.0: + exit(0) # if avg cost less than 10.0, we think our code is good. +exit(1) -- GitLab