Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
book
提交
c3bbf675
B
book
项目概览
PaddlePaddle
/
book
通知
16
Star
4
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
40
列表
看板
标记
里程碑
合并请求
37
Wiki
5
Wiki
分析
仓库
DevOps
项目成员
Pages
B
book
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
40
Issue
40
列表
看板
标记
里程碑
合并请求
37
合并请求
37
Pages
分析
分析
仓库分析
DevOps
Wiki
5
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c3bbf675
编写于
3月 08, 2017
作者:
G
gangliao
提交者:
GitHub
3月 08, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #181 from hedaoyuan/fix
Fix README.md
上级
8e798608
aace9ef4
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
26 addition
and
26 deletion
+26
-26
understand_sentiment/README.md
understand_sentiment/README.md
+13
-13
understand_sentiment/index.html
understand_sentiment/index.html
+13
-13
未找到文件。
understand_sentiment/README.md
浏览文件 @
c3bbf675
...
...
@@ -108,14 +108,14 @@ aclImdb
```
Paddle在
`dataset/imdb.py`
中提实现了imdb数据集的自动下载和读取,并提供了读取字典、训练数据、测试数据等API。
```
```
python
import
sys
import
paddle.v2
as
paddle
```
## 配置模型
在该示例中,我们实现了两种文本分类算法,分别基于上文所述的
[
文本卷积神经网络
](
#文本卷积神经网络(CNN)
)
和
[
栈式双向LSTM
](
#栈式双向LSTM(Stacked
Bidirectional LSTM))。
### 文本卷积神经网络
```
```
python
def
convolution_net
(
input_dim
,
class_dim
=
2
,
emb_dim
=
128
,
...
...
@@ -136,7 +136,7 @@ def convolution_net(input_dim,
```
网络的输入
`input_dim`
表示的是词典的大小,
`class_dim`
表示类别数。这里,我们使用
[
`sequence_conv_pool`
](
https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/trainer_config_helpers/networks.py
)
API实现了卷积和池化操作。
### 栈式双向LSTM
```
```
python
def
stacked_lstm_net
(
input_dim
,
class_dim
=
2
,
emb_dim
=
128
,
...
...
@@ -205,7 +205,7 @@ def stacked_lstm_net(input_dim,
```
网络的输入
`stacked_num`
表示的是LSTM的层数,需要是奇数,确保最高层LSTM正向。Paddle里面是通过一个fc和一个lstmemory来实现基于LSTM的循环神经网络。
## 训练模型
```
```
python
if
__name__
==
'__main__'
:
# init
paddle
.
init
(
use_gpu
=
False
)
...
...
@@ -213,14 +213,14 @@ if __name__ == '__main__':
启动paddle程序,use_gpu=False表示用CPU训练,如果系统支持GPU也可以修改成True使用GPU训练。
### 训练数据
使用Paddle提供的数据集
`dataset.imdb`
中的API来读取训练数据。
```
```
python
print
'load dictionary...'
word_dict
=
paddle
.
dataset
.
imdb
.
word_dict
()
dict_dim
=
len
(
word_dict
)
class_dim
=
2
```
加载数据字典,这里通过
`word_dict()`
API可以直接构造字典。
`class_dim`
是指样本类别数,该示例中样本只有正负两类。
```
```
python
train_reader
=
paddle
.
batch
(
paddle
.
reader
.
shuffle
(
lambda
:
paddle
.
dataset
.
imdb
.
train
(
word_dict
),
buf_size
=
1000
),
...
...
@@ -230,12 +230,12 @@ if __name__ == '__main__':
batch_size
=
100
)
```
这里,
`dataset.imdb.train()`
和
`dataset.imdb.test()`
分别是
`dataset.imdb`
中的训练数据和测试数据API。
`train_reader`
在训练时使用,意义是将读取的训练数据进行shuffle后,组成一个batch数据。同理,
`test_reader`
是在测试的时候使用,将读取的测试数据组成一个batch。
```
```
python
feeding
=
{
'word'
:
0
,
'label'
:
1
}
```
`feeding`
用来指定
`train_reader`
和
`test_reader`
返回的数据与模型配置中data_layer的对应关系。这里表示reader返回的第0列数据对应
`word`
层,第1列数据对应
`label`
层。
### 构造模型
```
```
python
# Please choose the way to build the network
# by uncommenting the corresponding line.
cost
=
convolution_net
(
dict_dim
,
class_dim
=
class_dim
)
...
...
@@ -243,13 +243,13 @@ if __name__ == '__main__':
```
该示例中默认使用
`convolution_net`
网络,如果使用
`stacked_lstm_net`
网络,注释相应的行即可。其中cost是网络的优化目标,同时cost包含了整个网络的拓扑信息。
### 网络参数
```
```
python
# create parameters
parameters
=
paddle
.
parameters
.
create
(
cost
)
```
根据网络的拓扑构造网络参数。这里parameters是整个网络的参数集。
### 优化算法
```
```
python
# create optimizer
adam_optimizer
=
paddle
.
optimizer
.
Adam
(
learning_rate
=
2e-3
,
...
...
@@ -259,7 +259,7 @@ if __name__ == '__main__':
Paddle中提供了一系列优化算法的API,这里使用Adam优化算法。
### 训练
可以通过
`paddle.trainer.SGD`
构造一个sgd trainer,并调用
`trainer.train`
来训练模型。
```
```
python
# End batch and end pass event handler
def
event_handler
(
event
):
if
isinstance
(
event
,
paddle
.
event
.
EndIteration
):
...
...
@@ -274,7 +274,7 @@ Paddle中提供了一系列优化算法的API,这里使用Adam优化算法。
print
"
\n
Test with Pass %d, %s"
%
(
event
.
pass_id
,
result
.
metrics
)
```
可以通过给train函数传递一个
`event_handler`
来获取每个batch和每个pass结束的状态。比如构造如下一个
`event_handler`
可以在每100个batch结束后输出cost和error;在每个pass结束后调用
`trainer.test`
计算一遍测试集并获得当前模型在测试集上的error。
```
```
python
# create trainer
trainer
=
paddle
.
trainer
.
SGD
(
cost
=
cost
,
parameters
=
parameters
,
...
...
@@ -287,7 +287,7 @@ Paddle中提供了一系列优化算法的API,这里使用Adam优化算法。
num_passes
=
2
)
```
程序运行之后的输出如下。
```
```
text
Pass 0, Batch 0, Cost 0.693721, {'classification_error_evaluator': 0.5546875}
...................................................................................................
Pass 0, Batch 100, Cost 0.294321, {'classification_error_evaluator': 0.1015625}
...
...
understand_sentiment/index.html
浏览文件 @
c3bbf675
...
...
@@ -150,14 +150,14 @@ aclImdb
```
Paddle在`dataset/imdb.py`中提实现了imdb数据集的自动下载和读取,并提供了读取字典、训练数据、测试数据等API。
```
```
python
import sys
import paddle.v2 as paddle
```
## 配置模型
在该示例中,我们实现了两种文本分类算法,分别基于上文所述的[文本卷积神经网络](#文本卷积神经网络(CNN))和[栈式双向LSTM](#栈式双向LSTM(Stacked Bidirectional LSTM))。
### 文本卷积神经网络
```
```
python
def convolution_net(input_dim,
class_dim=2,
emb_dim=128,
...
...
@@ -178,7 +178,7 @@ def convolution_net(input_dim,
```
网络的输入`input_dim`表示的是词典的大小,`class_dim`表示类别数。这里,我们使用[`sequence_conv_pool`](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/trainer_config_helpers/networks.py) API实现了卷积和池化操作。
### 栈式双向LSTM
```
```
python
def stacked_lstm_net(input_dim,
class_dim=2,
emb_dim=128,
...
...
@@ -247,7 +247,7 @@ def stacked_lstm_net(input_dim,
```
网络的输入`stacked_num`表示的是LSTM的层数,需要是奇数,确保最高层LSTM正向。Paddle里面是通过一个fc和一个lstmemory来实现基于LSTM的循环神经网络。
## 训练模型
```
```
python
if __name__ == '__main__':
# init
paddle.init(use_gpu=False)
...
...
@@ -255,14 +255,14 @@ if __name__ == '__main__':
启动paddle程序,use_gpu=False表示用CPU训练,如果系统支持GPU也可以修改成True使用GPU训练。
### 训练数据
使用Paddle提供的数据集`dataset.imdb`中的API来读取训练数据。
```
```
python
print 'load dictionary...'
word_dict = paddle.dataset.imdb.word_dict()
dict_dim = len(word_dict)
class_dim = 2
```
加载数据字典,这里通过`word_dict()`API可以直接构造字典。`class_dim`是指样本类别数,该示例中样本只有正负两类。
```
```
python
train_reader = paddle.batch(
paddle.reader.shuffle(
lambda: paddle.dataset.imdb.train(word_dict), buf_size=1000),
...
...
@@ -272,12 +272,12 @@ if __name__ == '__main__':
batch_size=100)
```
这里,`dataset.imdb.train()`和`dataset.imdb.test()`分别是`dataset.imdb`中的训练数据和测试数据API。`train_reader`在训练时使用,意义是将读取的训练数据进行shuffle后,组成一个batch数据。同理,`test_reader`是在测试的时候使用,将读取的测试数据组成一个batch。
```
```
python
feeding={'word': 0, 'label': 1}
```
`feeding`用来指定`train_reader`和`test_reader`返回的数据与模型配置中data_layer的对应关系。这里表示reader返回的第0列数据对应`word`层,第1列数据对应`label`层。
### 构造模型
```
```
python
# Please choose the way to build the network
# by uncommenting the corresponding line.
cost = convolution_net(dict_dim, class_dim=class_dim)
...
...
@@ -285,13 +285,13 @@ if __name__ == '__main__':
```
该示例中默认使用`convolution_net`网络,如果使用`stacked_lstm_net`网络,注释相应的行即可。其中cost是网络的优化目标,同时cost包含了整个网络的拓扑信息。
### 网络参数
```
```
python
# create parameters
parameters = paddle.parameters.create(cost)
```
根据网络的拓扑构造网络参数。这里parameters是整个网络的参数集。
### 优化算法
```
```
python
# create optimizer
adam_optimizer = paddle.optimizer.Adam(
learning_rate=2e-3,
...
...
@@ -301,7 +301,7 @@ if __name__ == '__main__':
Paddle中提供了一系列优化算法的API,这里使用Adam优化算法。
### 训练
可以通过`paddle.trainer.SGD`构造一个sgd trainer,并调用`trainer.train`来训练模型。
```
```
python
# End batch and end pass event handler
def event_handler(event):
if isinstance(event, paddle.event.EndIteration):
...
...
@@ -316,7 +316,7 @@ Paddle中提供了一系列优化算法的API,这里使用Adam优化算法。
print "\nTest with Pass %d, %s" % (event.pass_id, result.metrics)
```
可以通过给train函数传递一个`event_handler`来获取每个batch和每个pass结束的状态。比如构造如下一个`event_handler`可以在每100个batch结束后输出cost和error;在每个pass结束后调用`trainer.test`计算一遍测试集并获得当前模型在测试集上的error。
```
```
python
# create trainer
trainer = paddle.trainer.SGD(cost=cost,
parameters=parameters,
...
...
@@ -329,7 +329,7 @@ Paddle中提供了一系列优化算法的API,这里使用Adam优化算法。
num_passes=2)
```
程序运行之后的输出如下。
```
```
text
Pass 0, Batch 0, Cost 0.693721, {'classification_error_evaluator': 0.5546875}
...................................................................................................
Pass 0, Batch 100, Cost 0.294321, {'classification_error_evaluator': 0.1015625}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录