提交 406761e7 编写于 作者: C caoying03

follow comments.

上级 f4cdd71b
......@@ -109,7 +109,21 @@ return paddle.layer.mixed(
训练比较简单,直接运行``` python train.py ```。程序第一次运行会检测用户缓存文件夹中是否包含imikolov数据集,如果未包含,则自动下载。运行过程中,每100个iteration会打印模型训练信息,主要包含训练损失和测试损失,每个pass会保存一次模型。
## 预测阶段
预测时,在命令行运行 `infer.py --model_path XX`,通过`model_path`指定训练好的模型所在的路径。程序会首先load模型,然后按照batch方式进行预测,并打印预测结果。预测阶段最重要的就是根据概率得到编码路径,然后遍历路径获取最终的预测类别,这部分逻辑如下:
在命令行运行 :
```bash
python infer.py \
--model_path "models/XX" \
--batch_size 1 \
--use_gpu false \
--trainer_count 1
```
参数含义如下:
- `model_path`:指定训练好的模型所在的路径。必选。
- `batch_size`:一次预测并行的样本数目。可选,默认值为 `1`
- `use_gpu`:是否使用 GPU 进行预测。可选,默认值为 `False`
- `trainer_count` : 预测使用的线程数目。可选,默认为 `1`**注意:预测使用的线程数目必选大于一次预测并行的样本数目**
预测阶段根据多个二分类概率得到编码路径,遍历路径获取最终的预测类别,逻辑如下:
```python
def decode_res(infer_res, dict_size):
......@@ -142,6 +156,7 @@ def decode_res(infer_res, dict_size):
return predict_lbls
```
预测程序的输入数据格式与训练阶段相同,如have a dream that one,程序会根据have a dream that生成一组概率,通过对概率解码生成预测词,one作为真实词,方便评估。解码函数的输入是一个batch样本的预测概率以及词表的大小,里面的循环是对每条样本的输出概率进行解码,解码方式就是按照左0右1的准则,不断遍历路径,直至到达叶子节点。需要注意的是,本文选用的数据集需要较长的时间训练才能得到较好的结果,预测程序选用第一轮的模型,仅为展示方便,学习效果不能保证。
预测程序的输入数据格式与训练阶段相同,如`have a dream that one`,程序会根据`have a dream that`生成一组概率,通过对概率解码生成预测词,`one`作为真实词,方便评估。解码函数的输入是一个batch样本的预测概率以及词表的大小,里面的循环是对每条样本的输出概率进行解码,解码方式就是按照左0右1的准则,不断遍历路径,直至到达叶子节点。
## 参考文献
1. Morin, F., & Bengio, Y. (2005, January). [Hierarchical Probabilistic Neural Network Language Model](http://www.iro.umontreal.ca/~lisa/pointeurs/hierarchical-nnlm-aistats05.pdf). In Aistats (Vol. 5, pp. 246-252).
......@@ -151,7 +151,21 @@ return paddle.layer.mixed(
训练比较简单,直接运行``` python train.py ```。程序第一次运行会检测用户缓存文件夹中是否包含imikolov数据集,如果未包含,则自动下载。运行过程中,每100个iteration会打印模型训练信息,主要包含训练损失和测试损失,每个pass会保存一次模型。
## 预测阶段
预测时,在命令行运行 `infer.py --model_path XX`,通过`model_path`指定训练好的模型所在的路径。程序会首先load模型,然后按照batch方式进行预测,并打印预测结果。预测阶段最重要的就是根据概率得到编码路径,然后遍历路径获取最终的预测类别,这部分逻辑如下:
在命令行运行 :
```bash
python infer.py \
--model_path "models/XX" \
--batch_size 1 \
--use_gpu false \
--trainer_count 1
```
参数含义如下:
- `model_path`:指定训练好的模型所在的路径。必选。
- `batch_size`:一次预测并行的样本数目。可选,默认值为 `1`。
- `use_gpu`:是否使用 GPU 进行预测。可选,默认值为 `False`。
- `trainer_count` : 预测使用的线程数目。可选,默认为 `1`。**注意:预测使用的线程数目必选大于一次预测并行的样本数目**。
预测阶段根据多个二分类概率得到编码路径,遍历路径获取最终的预测类别,逻辑如下:
```python
def decode_res(infer_res, dict_size):
......@@ -184,7 +198,8 @@ def decode_res(infer_res, dict_size):
return predict_lbls
```
预测程序的输入数据格式与训练阶段相同如have a dream that one程序会根据have a dream that生成一组概率通过对概率解码生成预测词one作为真实词方便评估解码函数的输入是一个batch样本的预测概率以及词表的大小里面的循环是对每条样本的输出概率进行解码解码方式就是按照左0右1的准则不断遍历路径直至到达叶子节点需要注意的是本文选用的数据集需要较长的时间训练才能得到较好的结果预测程序选用第一轮的模型仅为展示方便学习效果不能保证
预测程序的输入数据格式与训练阶段相同`have a dream that one`,程序会根据`have a dream that`生成一组概率通过对概率解码生成预测词,`one`作为真实词方便评估解码函数的输入是一个batch样本的预测概率以及词表的大小里面的循环是对每条样本的输出概率进行解码解码方式就是按照左0右1的准则不断遍历路径直至到达叶子节点
## 参考文献
1. Morin, F., & Bengio, Y. (2005, January). [Hierarchical Probabilistic Neural Network Language Model](http://www.iro.umontreal.ca/~lisa/pointeurs/hierarchical-nnlm-aistats05.pdf). In Aistats (Vol. 5, pp. 246-252).
......
......@@ -68,7 +68,11 @@ def infer_a_batch(batch_ins, idx_word_dict, dict_size, inferer):
default=1,
help="Whether to use GPU in inference or not.")
def infer(model_path, batch_size, use_gpu, trainer_count):
assert os.path.exists(model_path), "trained model does not exist."
assert os.path.exists(model_path), "The trained model does not exist."
assert (batch_size and trainer_count and batch_size >= trainer_count), (
"batch_size and trainer_count must both be greater than 0. "
"And batch_size must be equal to "
"or greater than trainer_count.")
paddle.init(use_gpu=use_gpu, trainer_count=trainer_count)
word_dict = paddle.dataset.imikolov.build_dict(min_word_freq=2)
......
......@@ -34,6 +34,7 @@ def ngram_lm(hidden_size, embed_size, dict_size, gram_num=4, is_train=True):
return paddle.layer.hsigmoid(
input=hidden_layer,
label=target_word,
num_classes=dict_size,
param_attr=paddle.attr.Param(name="sigmoid_w"),
bias_attr=paddle.attr.Param(name="sigmoid_b"))
else:
......
......@@ -73,7 +73,20 @@ NCE 层的一些重要参数解释如下:
| act | 使用何种激活函数| 根据 NCE 的原理,这里应该使用 sigmoid 函数 |
## 预测
1. 在命令行运行 `infer.py --model_path XX`,通过`model_path`指定训练好的模型所在的路径。
1. 在命令行运行 :
```bash
python infer.py \
--model_path "models/XX" \
--batch_size 1 \
--use_gpu false \
--trainer_count 1
```
参数含义如下:
- `model_path`:指定训练好的模型所在的路径。必选。
- `batch_size`:一次预测并行的样本数目。可选,默认值为 `1`
- `use_gpu`:是否使用 GPU 进行预测。可选,默认值为 `False`
- `trainer_count` : 预测使用的线程数目。可选,默认为 `1`**注意:预测使用的线程数目必选大于一次预测并行的样本数目**
2. 需要注意的是:**预测和训练的计算逻辑不同**。预测使用全连接矩阵乘法后接`softmax`激活,输出基于各类别的概率分布,需要替换训练中使用的`paddle.train.nce`层。在PaddlePaddle中,NCE层将可学习参数存储为一个 `[类别数目 × 上一层输出向量宽度]` 大小的矩阵,预测时,**全连接运算在加载NCE层学习到参数时,需要进行转置**,代码如下:
```python
return paddle.layer.mixed(
......@@ -85,8 +98,7 @@ NCE 层的一些重要参数解释如下:
```
上述代码片段中的 `paddle.layer.mixed` 必须以 PaddlePaddle 中 `paddle.layer.×_projection` 为输入。`paddle.layer.mixed` 将多个 `projection` (输入可以是多个)计算结果求和作为输出。`paddle.layer.trans_full_matrix_projection` 在计算矩阵乘法时会对参数$W$进行转置。
3. 运行 `python infer.py`。程序首先会加载指定的模型,然后按照 batch 大小依次进行预测,并打印预测结果。预测的输出格式如下:
3. 预测的输出格式如下:
```text
0.6734 their may want to move
```
......
......@@ -115,7 +115,20 @@ NCE 层的一些重要参数解释如下:
| act | 使用何种激活函数| 根据 NCE 的原理,这里应该使用 sigmoid 函数 |
## 预测
1. 在命令行运行 `infer.py --model_path XX`,通过`model_path`指定训练好的模型所在的路径。
1. 在命令行运行 :
```bash
python infer.py \
--model_path "models/XX" \
--batch_size 1 \
--use_gpu false \
--trainer_count 1
```
参数含义如下:
- `model_path`:指定训练好的模型所在的路径。必选。
- `batch_size`:一次预测并行的样本数目。可选,默认值为 `1`。
- `use_gpu`:是否使用 GPU 进行预测。可选,默认值为 `False`。
- `trainer_count` : 预测使用的线程数目。可选,默认为 `1`。**注意:预测使用的线程数目必选大于一次预测并行的样本数目**。
2. 需要注意的是:**预测和训练的计算逻辑不同**。预测使用全连接矩阵乘法后接`softmax`激活,输出基于各类别的概率分布,需要替换训练中使用的`paddle.train.nce`层。在PaddlePaddle中,NCE层将可学习参数存储为一个 `[类别数目 × 上一层输出向量宽度]` 大小的矩阵,预测时,**全连接运算在加载NCE层学习到参数时,需要进行转置**,代码如下:
```python
return paddle.layer.mixed(
......@@ -127,8 +140,7 @@ NCE 层的一些重要参数解释如下:
```
上述代码片段中的 `paddle.layer.mixed` 必须以 PaddlePaddle 中 `paddle.layer.×_projection` 为输入。`paddle.layer.mixed` 将多个 `projection` (输入可以是多个)计算结果求和作为输出。`paddle.layer.trans_full_matrix_projection` 在计算矩阵乘法时会对参数$W$进行转置。
3. 运行 `python infer.py`。程序首先会加载指定的模型,然后按照 batch 大小依次进行预测,并打印预测结果。预测的输出格式如下:
3. 预测的输出格式如下:
```text
0.6734 their may want to move
```
......
......@@ -31,7 +31,12 @@ def infer_a_batch(inferer, test_batch, id_to_word):
default=1,
help="Whether to use GPU in inference or not.")
def infer(model_path, batch_size, use_gpu, trainer_count):
assert os.path.exists(model_path), "the trained model does not exist."
assert os.path.exists(model_path), "The trained model does not exist."
assert (batch_size and trainer_count and batch_size >= trainer_count), (
"batch_size and trainer_count must both be greater than 0. "
"And batch_size must be equal to "
"or greater than trainer_count.")
word_to_id = paddle.dataset.imikolov.build_dict()
id_to_word = dict((v, k) for k, v in word_to_id.items())
dict_size = len(word_to_id)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册