diff --git a/01.fit_a_line/index.cn.html b/01.fit_a_line/index.cn.html
index c5a8ba6ece701cfae62d67c1a372597f863c243d..c6ad4e241ecfe804d1a9f0c4d852511a25e2bc7b 100644
--- a/01.fit_a_line/index.cn.html
+++ b/01.fit_a_line/index.cn.html
@@ -219,6 +219,80 @@ PaddlePaddle提供了读取数据者发生器机制来读取训练数据。读
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
@@ -226,7 +300,6 @@ feed_order=['x', 'y']
params_dirname = "fit_a_line.inference.model"
# Plot data
-from paddle.v2.plot import Ploter
train_title = "Train cost"
test_title = "Test cost"
plot_cost = Ploter(train_title, test_title)
@@ -301,7 +374,7 @@ inferencer = fluid.contrib.inferencer.Inferencer(
batch_size = 10
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_y = numpy.array([data[1] for data in test_data]).astype("float32")
diff --git a/01.fit_a_line/index.html b/01.fit_a_line/index.html
index f1b10766e293bb5654eb8d97c9e6e67256e639c5..d17a3c2106a30c3f210067a7dd503eea17a03c33 100644
--- a/01.fit_a_line/index.html
+++ b/01.fit_a_line/index.html
@@ -238,6 +238,80 @@ for loading the training data. A reader may return multiple columns, and we need
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:
```python
@@ -245,7 +319,6 @@ Moreover, an event handler is provided to print the training progress:
params_dirname = "fit_a_line.inference.model"
# Plot data
-from paddle.v2.plot import Ploter
train_title = "Train cost"
test_title = "Test cost"
plot_cost = Ploter(train_title, test_title)
@@ -323,7 +396,7 @@ inferencer = fluid.contrib.inferencer.Inferencer(
batch_size = 10
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_y = numpy.array([data[1] for data in test_data]).astype("float32")
diff --git a/03.image_classification/index.cn.html b/03.image_classification/index.cn.html
index 0bf50435e02c1bebfcff73dff4363f3f7dd20706..36c0b4c7c58b6e5cb095705b08ea05b6fc78d1c1 100644
--- a/03.image_classification/index.cn.html
+++ b/03.image_classification/index.cn.html
@@ -324,7 +324,7 @@ def layer_warp(block_func, input, ch_in, ch_out, count, stride):
def resnet_cifar10(ipt, depth=32):
# depth should be one of 20, 32, 44, 56, 110, 1202
assert (depth - 2) % 6 == 0
- n = (depth - 2) / 6
+ n = (depth - 2) // 6
nStages = {16, 64, 128}
conv1 = conv_bn_layer(ipt, ch_out=16, filter_size=3, stride=1, padding=1)
res1 = layer_warp(basicblock, conv1, 16, 16, n, 1)
diff --git a/03.image_classification/index.html b/03.image_classification/index.html
index 8d4a444352553f51fb8383ea17f92a1b69d1e500..c79db6cc72838f4ca69cecfe9a7d90866133a7f8 100644
--- a/03.image_classification/index.html
+++ b/03.image_classification/index.html
@@ -324,7 +324,7 @@ Note: besides the first convolutional layer and the last fully-connected layer,
def resnet_cifar10(ipt, depth=32):
# depth should be one of 20, 32, 44, 56, 110, 1202
assert (depth - 2) % 6 == 0
- n = (depth - 2) / 6
+ n = (depth - 2) // 6
nStages = {16, 64, 128}
conv1 = conv_bn_layer(ipt, ch_out=16, filter_size=3, stride=1, padding=1)
res1 = layer_warp(basicblock, conv1, 16, 16, n, 1)
diff --git a/04.word2vec/index.cn.html b/04.word2vec/index.cn.html
index d5e3fa5f60f8611eac689ce376985610e50c077f..1ee73b4d4e80b3d937b222697f739148ff0807cb 100644
--- a/04.word2vec/index.cn.html
+++ b/04.word2vec/index.cn.html
@@ -250,6 +250,7 @@ import numpy
from functools import partial
import math
import os
+import six
import sys
from __future__ import print_function
```
@@ -436,7 +437,7 @@ def infer(use_cuda, inference_program, params_dirname=None):
most_possible_word_index = numpy.argmax(result[0])
print(most_possible_word_index)
print([
- key for key, value in word_dict.iteritems()
+ key for key, value in six.iteritems(word_dict)
if value == most_possible_word_index
][0])
```
diff --git a/04.word2vec/index.html b/04.word2vec/index.html
index a945728ac045e4b430e30ff1fc75a6d5e06297fc..1eb5381a17f5999e7c65aa8bbb7adbfa2a6737ec 100644
--- a/04.word2vec/index.html
+++ b/04.word2vec/index.html
@@ -263,6 +263,7 @@ import numpy
from functools import partial
import math
import os
+import six
import sys
from __future__ import print_function
```
@@ -454,7 +455,7 @@ def infer(use_cuda, inference_program, params_dirname=None):
most_possible_word_index = numpy.argmax(result[0])
print(most_possible_word_index)
print([
- key for key, value in word_dict.iteritems()
+ key for key, value in six.iteritems(word_dict)
if value == most_possible_word_index
][0])
```
diff --git a/06.understand_sentiment/index.cn.html b/06.understand_sentiment/index.cn.html
index 66183b091461d265d5e7a4f19887a55c6bbe48ff..03956dc465931399badb89738cc611c1308dfe50 100644
--- a/06.understand_sentiment/index.cn.html
+++ b/06.understand_sentiment/index.cn.html
@@ -316,7 +316,7 @@ params_dirname = "understand_sentiment_conv.inference.model"
def event_handler(event):
if isinstance(event, fluid.contrib.trainer.EndStepEvent):
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:
trainer.save_params(params_dirname)
diff --git a/06.understand_sentiment/index.html b/06.understand_sentiment/index.html
index 49d8ee2f3fb35b6b5246bab4f9e68b27f0207500..a8896e98656daef277e6e6f18e5a8a6de62335ba 100644
--- a/06.understand_sentiment/index.html
+++ b/06.understand_sentiment/index.html
@@ -323,7 +323,7 @@ params_dirname = "understand_sentiment_conv.inference.model"
def event_handler(event):
if isinstance(event, fluid.contrib.trainer.EndStepEvent):
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:
trainer.save_params(params_dirname)
diff --git a/06.understand_sentiment/train_conv.py b/06.understand_sentiment/train_conv.py
index eeef644f0b6d84cc619827bf031f2b7ccdacaf33..f9435cc8d8343bf85a1472ccbeb1e21f79a6f7d2 100644
--- a/06.understand_sentiment/train_conv.py
+++ b/06.understand_sentiment/train_conv.py
@@ -111,7 +111,8 @@ def train(use_cuda, train_program, params_dirname):
event.step, avg_cost, acc))
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):
trainer.save_params(params_dirname)
diff --git a/06.understand_sentiment/train_dyn_rnn.py b/06.understand_sentiment/train_dyn_rnn.py
index 090720af5293995ecdeadf78dfe7dc37f569e019..5f6f79d5f0f6cfacdf84cd9c56d49e78044abe9e 100644
--- a/06.understand_sentiment/train_dyn_rnn.py
+++ b/06.understand_sentiment/train_dyn_rnn.py
@@ -128,7 +128,8 @@ def train(use_cuda, train_program, params_dirname):
event.step, avg_cost, acc))
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):
trainer.save_params(params_dirname)
diff --git a/06.understand_sentiment/train_stacked_lstm.py b/06.understand_sentiment/train_stacked_lstm.py
index b665c6ecc3eb8be393a63a9998c46abbc8904d66..8304979d7b7d29f620dc85a7d209792a065f84b9 100644
--- a/06.understand_sentiment/train_stacked_lstm.py
+++ b/06.understand_sentiment/train_stacked_lstm.py
@@ -119,7 +119,8 @@ def train(use_cuda, train_program, params_dirname):
event.step, avg_cost, acc))
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):
trainer.save_params(params_dirname)
diff --git a/07.label_semantic_roles/index.cn.html b/07.label_semantic_roles/index.cn.html
index 35615148be6171f4ff8d84f2a1117e48a9818526..f08d42d68d0fa389e4175b55d8b623dcb7c70bfd 100644
--- a/07.label_semantic_roles/index.cn.html
+++ b/07.label_semantic_roles/index.cn.html
@@ -226,8 +226,9 @@ from __future__ import print_function
import math, os
import numpy as np
import paddle
-import paddle.v2.dataset.conll05 as conll05
+import paddle.dataset.conll05 as conll05
import paddle.fluid as fluid
+import six
import time
with_gpu = os.getenv('WITH_GPU', '0') != '0'
@@ -459,7 +460,7 @@ def train(use_cuda, save_dirname=None, is_local=True):
start_time = time.time()
batch_id = 0
- for pass_id in xrange(PASS_NUM):
+ for pass_id in six.moves.xrange(PASS_NUM):
for data in train_data():
cost = exe.run(main_program,
feed=feeder.feed(data),
diff --git a/07.label_semantic_roles/index.html b/07.label_semantic_roles/index.html
index 170c6b6f5916415bfbbb564680dc1efa12ef6de5..2319d7c5269aec5d025e80128dcc040ba848ccf7 100644
--- a/07.label_semantic_roles/index.html
+++ b/07.label_semantic_roles/index.html
@@ -249,8 +249,9 @@ from __future__ import print_function
import math, os
import numpy as np
import paddle
-import paddle.v2.dataset.conll05 as conll05
+import paddle.dataset.conll05 as conll05
import paddle.fluid as fluid
+import six
import time
with_gpu = os.getenv('WITH_GPU', '0') != '0'
@@ -469,7 +470,7 @@ def train(use_cuda, save_dirname=None, is_local=True):
start_time = time.time()
batch_id = 0
- for pass_id in xrange(PASS_NUM):
+ for pass_id in six.moves.xrange(PASS_NUM):
for data in train_data():
cost = exe.run(main_program,
feed=feeder.feed(data),