提交 330f442d 编写于 作者: M minqiyang

Polish code

上级 68f41a42
...@@ -219,6 +219,80 @@ PaddlePaddle提供了读取数据者发生器机制来读取训练数据。读 ...@@ -219,6 +219,80 @@ PaddlePaddle提供了读取数据者发生器机制来读取训练数据。读
feed_order=['x', 'y'] feed_order=['x', 'y']
``` ```
以及一个绘画器来进行绘制:
```python
import six
import os
class PlotData(object):
def __init__(self):
self.step = []
self.value = []
def append(self, step, value):
self.step.append(step)
self.value.append(value)
def reset(self):
self.step = []
self.value = []
class Ploter(object):
def __init__(self, *args):
self.__args__ = args
self.__plot_data__ = {}
for title in args:
self.__plot_data__[title] = PlotData()
# demo in notebooks will use Ploter to plot figure, but when we convert
# the ipydb to py file for testing, the import of matplotlib will make the
# script crash. So we can use `export DISABLE_PLOT=True` to disable import
# these libs
self.__disable_plot__ = os.environ.get("DISABLE_PLOT")
if not self.__plot_is_disabled__():
import matplotlib.pyplot as plt
from IPython import display
self.plt = plt
self.display = display
def __plot_is_disabled__(self):
return self.__disable_plot__ == "True"
def append(self, title, step, value):
assert isinstance(title, six.string_types)
assert title in self.__plot_data__
data = self.__plot_data__[title]
assert isinstance(data, PlotData)
data.append(step, value)
def plot(self, path=None):
if self.__plot_is_disabled__():
return
titles = []
for title in self.__args__:
data = self.__plot_data__[title]
assert isinstance(data, PlotData)
if len(data.step) > 0:
titles.append(title)
self.plt.plot(data.step, data.value)
self.plt.legend(titles, loc='upper left')
if path is None:
self.display.clear_output(wait=True)
self.display.display(self.plt.gcf())
else:
self.plt.savefig(path)
self.plt.gcf().clear()
def reset(self):
for key in self.__plot_data__:
data = self.__plot_data__[key]
assert isinstance(data, PlotData)
data.reset()
```
除此之外,可以定义一个事件响应器来处理类似`打印训练进程`的事件: 除此之外,可以定义一个事件响应器来处理类似`打印训练进程`的事件:
```python ```python
...@@ -226,7 +300,6 @@ feed_order=['x', 'y'] ...@@ -226,7 +300,6 @@ feed_order=['x', 'y']
params_dirname = "fit_a_line.inference.model" params_dirname = "fit_a_line.inference.model"
# Plot data # Plot data
from paddle.v2.plot import Ploter
train_title = "Train cost" train_title = "Train cost"
test_title = "Test cost" test_title = "Test cost"
plot_cost = Ploter(train_title, test_title) plot_cost = Ploter(train_title, test_title)
...@@ -301,7 +374,7 @@ inferencer = fluid.contrib.inferencer.Inferencer( ...@@ -301,7 +374,7 @@ inferencer = fluid.contrib.inferencer.Inferencer(
batch_size = 10 batch_size = 10
test_reader = paddle.batch(paddle.dataset.uci_housing.test(),batch_size=batch_size) test_reader = paddle.batch(paddle.dataset.uci_housing.test(),batch_size=batch_size)
test_data = test_reader().next() test_data = next(test_reader())
test_x = numpy.array([data[0] for data in test_data]).astype("float32") test_x = numpy.array([data[0] for data in test_data]).astype("float32")
test_y = numpy.array([data[1] for data in test_data]).astype("float32") test_y = numpy.array([data[1] for data in test_data]).astype("float32")
......
...@@ -238,6 +238,80 @@ for loading the training data. A reader may return multiple columns, and we need ...@@ -238,6 +238,80 @@ for loading the training data. A reader may return multiple columns, and we need
feed_order=['x', 'y'] feed_order=['x', 'y']
``` ```
And a ploter to plot metrics:
```python
import six
import os
class PlotData(object):
def __init__(self):
self.step = []
self.value = []
def append(self, step, value):
self.step.append(step)
self.value.append(value)
def reset(self):
self.step = []
self.value = []
class Ploter(object):
def __init__(self, *args):
self.__args__ = args
self.__plot_data__ = {}
for title in args:
self.__plot_data__[title] = PlotData()
# demo in notebooks will use Ploter to plot figure, but when we convert
# the ipydb to py file for testing, the import of matplotlib will make the
# script crash. So we can use `export DISABLE_PLOT=True` to disable import
# these libs
self.__disable_plot__ = os.environ.get("DISABLE_PLOT")
if not self.__plot_is_disabled__():
import matplotlib.pyplot as plt
from IPython import display
self.plt = plt
self.display = display
def __plot_is_disabled__(self):
return self.__disable_plot__ == "True"
def append(self, title, step, value):
assert isinstance(title, six.string_types)
assert title in self.__plot_data__
data = self.__plot_data__[title]
assert isinstance(data, PlotData)
data.append(step, value)
def plot(self, path=None):
if self.__plot_is_disabled__():
return
titles = []
for title in self.__args__:
data = self.__plot_data__[title]
assert isinstance(data, PlotData)
if len(data.step) > 0:
titles.append(title)
self.plt.plot(data.step, data.value)
self.plt.legend(titles, loc='upper left')
if path is None:
self.display.clear_output(wait=True)
self.display.display(self.plt.gcf())
else:
self.plt.savefig(path)
self.plt.gcf().clear()
def reset(self):
for key in self.__plot_data__:
data = self.__plot_data__[key]
assert isinstance(data, PlotData)
data.reset()
```
Moreover, an event handler is provided to print the training progress: Moreover, an event handler is provided to print the training progress:
```python ```python
...@@ -245,7 +319,6 @@ Moreover, an event handler is provided to print the training progress: ...@@ -245,7 +319,6 @@ Moreover, an event handler is provided to print the training progress:
params_dirname = "fit_a_line.inference.model" params_dirname = "fit_a_line.inference.model"
# Plot data # Plot data
from paddle.v2.plot import Ploter
train_title = "Train cost" train_title = "Train cost"
test_title = "Test cost" test_title = "Test cost"
plot_cost = Ploter(train_title, test_title) plot_cost = Ploter(train_title, test_title)
...@@ -323,7 +396,7 @@ inferencer = fluid.contrib.inferencer.Inferencer( ...@@ -323,7 +396,7 @@ inferencer = fluid.contrib.inferencer.Inferencer(
batch_size = 10 batch_size = 10
test_reader = paddle.batch(paddle.dataset.uci_housing.test(),batch_size=batch_size) test_reader = paddle.batch(paddle.dataset.uci_housing.test(),batch_size=batch_size)
test_data = test_reader().next() test_data = next(test_reader())
test_x = numpy.array([data[0] for data in test_data]).astype("float32") test_x = numpy.array([data[0] for data in test_data]).astype("float32")
test_y = numpy.array([data[1] for data in test_data]).astype("float32") test_y = numpy.array([data[1] for data in test_data]).astype("float32")
......
...@@ -324,7 +324,7 @@ def layer_warp(block_func, input, ch_in, ch_out, count, stride): ...@@ -324,7 +324,7 @@ def layer_warp(block_func, input, ch_in, ch_out, count, stride):
def resnet_cifar10(ipt, depth=32): def resnet_cifar10(ipt, depth=32):
# depth should be one of 20, 32, 44, 56, 110, 1202 # depth should be one of 20, 32, 44, 56, 110, 1202
assert (depth - 2) % 6 == 0 assert (depth - 2) % 6 == 0
n = (depth - 2) / 6 n = (depth - 2) // 6
nStages = {16, 64, 128} nStages = {16, 64, 128}
conv1 = conv_bn_layer(ipt, ch_out=16, filter_size=3, stride=1, padding=1) conv1 = conv_bn_layer(ipt, ch_out=16, filter_size=3, stride=1, padding=1)
res1 = layer_warp(basicblock, conv1, 16, 16, n, 1) res1 = layer_warp(basicblock, conv1, 16, 16, n, 1)
......
...@@ -324,7 +324,7 @@ Note: besides the first convolutional layer and the last fully-connected layer, ...@@ -324,7 +324,7 @@ Note: besides the first convolutional layer and the last fully-connected layer,
def resnet_cifar10(ipt, depth=32): def resnet_cifar10(ipt, depth=32):
# depth should be one of 20, 32, 44, 56, 110, 1202 # depth should be one of 20, 32, 44, 56, 110, 1202
assert (depth - 2) % 6 == 0 assert (depth - 2) % 6 == 0
n = (depth - 2) / 6 n = (depth - 2) // 6
nStages = {16, 64, 128} nStages = {16, 64, 128}
conv1 = conv_bn_layer(ipt, ch_out=16, filter_size=3, stride=1, padding=1) conv1 = conv_bn_layer(ipt, ch_out=16, filter_size=3, stride=1, padding=1)
res1 = layer_warp(basicblock, conv1, 16, 16, n, 1) res1 = layer_warp(basicblock, conv1, 16, 16, n, 1)
......
...@@ -250,6 +250,7 @@ import numpy ...@@ -250,6 +250,7 @@ import numpy
from functools import partial from functools import partial
import math import math
import os import os
import six
import sys import sys
from __future__ import print_function from __future__ import print_function
``` ```
...@@ -436,7 +437,7 @@ def infer(use_cuda, inference_program, params_dirname=None): ...@@ -436,7 +437,7 @@ def infer(use_cuda, inference_program, params_dirname=None):
most_possible_word_index = numpy.argmax(result[0]) most_possible_word_index = numpy.argmax(result[0])
print(most_possible_word_index) print(most_possible_word_index)
print([ print([
key for key, value in word_dict.iteritems() key for key, value in six.iteritems(word_dict)
if value == most_possible_word_index if value == most_possible_word_index
][0]) ][0])
``` ```
......
...@@ -263,6 +263,7 @@ import numpy ...@@ -263,6 +263,7 @@ import numpy
from functools import partial from functools import partial
import math import math
import os import os
import six
import sys import sys
from __future__ import print_function from __future__ import print_function
``` ```
...@@ -454,7 +455,7 @@ def infer(use_cuda, inference_program, params_dirname=None): ...@@ -454,7 +455,7 @@ def infer(use_cuda, inference_program, params_dirname=None):
most_possible_word_index = numpy.argmax(result[0]) most_possible_word_index = numpy.argmax(result[0])
print(most_possible_word_index) print(most_possible_word_index)
print([ print([
key for key, value in word_dict.iteritems() key for key, value in six.iteritems(word_dict)
if value == most_possible_word_index if value == most_possible_word_index
][0]) ][0])
``` ```
......
...@@ -316,7 +316,7 @@ params_dirname = "understand_sentiment_conv.inference.model" ...@@ -316,7 +316,7 @@ params_dirname = "understand_sentiment_conv.inference.model"
def event_handler(event): def event_handler(event):
if isinstance(event, fluid.contrib.trainer.EndStepEvent): if isinstance(event, fluid.contrib.trainer.EndStepEvent):
print("Step {0}, Epoch {1} Metrics {2}".format( print("Step {0}, Epoch {1} Metrics {2}".format(
event.step, event.epoch, map(np.array, event.metrics))) event.step, event.epoch, list(map(np.array, event.metrics))))
if event.step == 10: if event.step == 10:
trainer.save_params(params_dirname) trainer.save_params(params_dirname)
......
...@@ -323,7 +323,7 @@ params_dirname = "understand_sentiment_conv.inference.model" ...@@ -323,7 +323,7 @@ params_dirname = "understand_sentiment_conv.inference.model"
def event_handler(event): def event_handler(event):
if isinstance(event, fluid.contrib.trainer.EndStepEvent): if isinstance(event, fluid.contrib.trainer.EndStepEvent):
print("Step {0}, Epoch {1} Metrics {2}".format( print("Step {0}, Epoch {1} Metrics {2}".format(
event.step, event.epoch, map(np.array, event.metrics))) event.step, event.epoch, list(map(np.array, event.metrics))))
if event.step == 10: if event.step == 10:
trainer.save_params(params_dirname) trainer.save_params(params_dirname)
......
...@@ -111,7 +111,8 @@ def train(use_cuda, train_program, params_dirname): ...@@ -111,7 +111,8 @@ def train(use_cuda, train_program, params_dirname):
event.step, avg_cost, acc)) event.step, avg_cost, acc))
print("Step {0}, Epoch {1} Metrics {2}".format( print("Step {0}, Epoch {1} Metrics {2}".format(
event.step, event.epoch, list(map(np.array, event.metrics)))) event.step, event.epoch, list(map(np.array,
event.metrics))))
elif isinstance(event, EndEpochEvent): elif isinstance(event, EndEpochEvent):
trainer.save_params(params_dirname) trainer.save_params(params_dirname)
......
...@@ -128,7 +128,8 @@ def train(use_cuda, train_program, params_dirname): ...@@ -128,7 +128,8 @@ def train(use_cuda, train_program, params_dirname):
event.step, avg_cost, acc)) event.step, avg_cost, acc))
print("Step {0}, Epoch {1} Metrics {2}".format( print("Step {0}, Epoch {1} Metrics {2}".format(
event.step, event.epoch, list(map(np.array, event.metrics)))) event.step, event.epoch, list(map(np.array,
event.metrics))))
elif isinstance(event, EndEpochEvent): elif isinstance(event, EndEpochEvent):
trainer.save_params(params_dirname) trainer.save_params(params_dirname)
......
...@@ -119,7 +119,8 @@ def train(use_cuda, train_program, params_dirname): ...@@ -119,7 +119,8 @@ def train(use_cuda, train_program, params_dirname):
event.step, avg_cost, acc)) event.step, avg_cost, acc))
print("Step {0}, Epoch {1} Metrics {2}".format( print("Step {0}, Epoch {1} Metrics {2}".format(
event.step, event.epoch, list(map(np.array, event.metrics)))) event.step, event.epoch, list(map(np.array,
event.metrics))))
elif isinstance(event, EndEpochEvent): elif isinstance(event, EndEpochEvent):
trainer.save_params(params_dirname) trainer.save_params(params_dirname)
......
...@@ -226,8 +226,9 @@ from __future__ import print_function ...@@ -226,8 +226,9 @@ from __future__ import print_function
import math, os import math, os
import numpy as np import numpy as np
import paddle import paddle
import paddle.v2.dataset.conll05 as conll05 import paddle.dataset.conll05 as conll05
import paddle.fluid as fluid import paddle.fluid as fluid
import six
import time import time
with_gpu = os.getenv('WITH_GPU', '0') != '0' with_gpu = os.getenv('WITH_GPU', '0') != '0'
...@@ -459,7 +460,7 @@ def train(use_cuda, save_dirname=None, is_local=True): ...@@ -459,7 +460,7 @@ def train(use_cuda, save_dirname=None, is_local=True):
start_time = time.time() start_time = time.time()
batch_id = 0 batch_id = 0
for pass_id in xrange(PASS_NUM): for pass_id in six.moves.xrange(PASS_NUM):
for data in train_data(): for data in train_data():
cost = exe.run(main_program, cost = exe.run(main_program,
feed=feeder.feed(data), feed=feeder.feed(data),
......
...@@ -249,8 +249,9 @@ from __future__ import print_function ...@@ -249,8 +249,9 @@ from __future__ import print_function
import math, os import math, os
import numpy as np import numpy as np
import paddle import paddle
import paddle.v2.dataset.conll05 as conll05 import paddle.dataset.conll05 as conll05
import paddle.fluid as fluid import paddle.fluid as fluid
import six
import time import time
with_gpu = os.getenv('WITH_GPU', '0') != '0' with_gpu = os.getenv('WITH_GPU', '0') != '0'
...@@ -469,7 +470,7 @@ def train(use_cuda, save_dirname=None, is_local=True): ...@@ -469,7 +470,7 @@ def train(use_cuda, save_dirname=None, is_local=True):
start_time = time.time() start_time = time.time()
batch_id = 0 batch_id = 0
for pass_id in xrange(PASS_NUM): for pass_id in six.moves.xrange(PASS_NUM):
for data in train_data(): for data in train_data():
cost = exe.run(main_program, cost = exe.run(main_program,
feed=feeder.feed(data), feed=feeder.feed(data),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册