README.md 3.9 KB
Newer Older
C
chenxuyi 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
简体中文|[English](./README.en.md)
# Introducing paddle-propeller
本文档介绍propeller,一种可极大地简化机器学习编程的高阶 Paddle API。propeller 会封装下列操作:
-   训练
-   评估
-   预测
-   导出以供使用(上线)  
  
Propeller 具有下列优势:

-   您可以在本地主机上或分布式多服务器环境中运行基于 Propeller 的模型,而无需更改模型。此外,您可以在 CPU、GPU上运行基于 Propeller 的模型,而无需重新编码模型。
-   Propeller 简化了在模型开发者之间共享实现的过程。
-   只需关注模型实现以及数据输入,而无需关注其他辅助代码(保存、热启动、打log等)
-   Propeller 会为您构建Program以及PyReader。
-   Propeller 提供安全的分布式训练循环,可以控制如何以及何时:
    -   构建Program
    -   初始化变量
    -   处理异常
    -   创建检查点文件并从故障中恢复
    -   保存可视化的摘要结果

## Getting Started|快速开始
```python

    #定义训练模型
    class BowModel(propeller.Model):
        def __init__(self, config, mode):
            self.embedding = Embedding(config['emb_size'], config['vocab_size'])
            self.fc1 = FC(config['hidden_size'])
            self.fc2 = FC(config['hidden_size']

        def forward(self, features):
            q, t = features 
            q_emb = softsign(self.embedding(q))
            t_emb = softsign(self.embedding(t))
            q_emb = self.fc1(q_emb)
            t_emb = self.fc2(t_emn)
            prediction = dot(q_emb,  emb)
            return prediction

        def loss(self, predictions, label):
            return sigmoid_cross_entropy_with_logits(predictions, label)

        def backward(self, loss):
            opt = AdamOptimizer(1.e-3)
            opt.mimize(loss)

        def metrics(self, predictions, label):
            auc = atarshi.metrics.Auc(predictions, label)
            return {'auc': auc}

    # 超参可以来自于文件/ 环境变量/ 命令行
    run_config = propeller.parse_runconfig(args)
    hparams = propeller.parse_hparam(args)
    
    # 定义数据: 
    # `FeatureColumns` 用于管理训练、预测文件. 会自动进行二进制化.
    feature_column = propeller.data.FeatureColumns(columns=[
            propeller.data.TextColumn('query', vocab='./vocab'),
            propeller.data.TextColumn('title', vocab='./vocab'),
            propeller.data.LabelColumn('label'),
        ])
    train_ds = feature_column.build_dataset(data_dir='./data',  shuffle=True, repeat=True)
    eval_ds = feature_column.build_dataset(data_dir='./data', shuffle=False, repeat=False)

    # 开始训练!
    propeller.train_and_eval(BowModel, hparams, run_config, train_ds, eval_ds)
```
C
chenxuyi 已提交
69
详细详细请见example/toy/
C
chenxuyi 已提交
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87

## 主要构件
1. train_and_eval

    会根据用户提供的`propeller.Model`类,实例化两种模式下的训练模型: 1. TRAIN模式 2. EVAL模式。
    然后开始训练,同时执行评估(Evaluation)

2. FeatureColumns
    
`FeatureColumns`来管理训练数据. 根据自定义`Column`来适配多种ML任务(NLP/CV...).
    `FeatureColumns`会自动对提供的训练数据进行批量预处理(tokenization, 查词表, etc.)并二进制化,并且生成训练用的dataset

3. Dataset

    `FeatureColumns`生成`Dataset`,或者您可以调用`propeller.Dataset.from_generator_func`来构造自己的`Dataset`,配合shuffle/ interleave/ padded_batch/ repeat 等方法满足定制化需求.

4. Summary
    对训练过程中的某些参数进行log追踪,只需要:
C
chenxuyi 已提交
88 89
```python
            propeller.summary.histogram('loss', tensor) 
C
chenxuyi 已提交
90

C
chenxuyi 已提交
91
```
C
chenxuyi 已提交
92 93 94 95 96 97 98 99 100 101 102 103 104 105


## Contributing|贡献

1. 本项目处于初期阶段,欢迎贡献!
2. functional programing is welcomed


## TODO

1. dataset output_types/ output_shapes 自动推断
2. 自动超参数搜索
3. propeller server
4. ...