README.md 3.8 KB
Newer Older
O
overlordmax 已提交
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
# Share_bottom

 以下是本例的简要目录结构及说明: 

```
├── README.md # 文档
├── share_bottom.py # mmoe模型脚本
├── utils # 通用函数
├── args # 参数脚本
├── create_data.sh # 生成训练数据脚本
├── data_preparation.py # 数据预处理脚本
├── train_gpu.sh # gpu训练脚本
├── train_cpu.sh # cpu训练脚本
```

## 简介

share_bottom是多任务学习的基本框架,其特点是对于不同的任务,底层的参数和网络结构是共享的,这种结构的优点是极大地减少网络的参数数量的情况下也能很好地对多任务进行学习,但缺点也很明显,由于底层的参数和网络结构是完全共享的,因此对于相关性不高的两个任务会导致优化冲突,从而影响模型最终的结果。后续很多Neural-based的多任务模型都是基于share_bottom发展而来的,如MMOE等模型可以改进share_bottom在多任务之间相关性低导致模型效果差的缺点。

我们在Paddlepaddle实现share_bottom网络结构,并在开源数据集Census-income Data上验证模型效果。两个任务的auc分别为:

1.income

>best:0.94899
>
>mean:0.94402

2.marital

> best:0.99394
>
> mean:0.99311

本项目支持GPU和CPU两种单机训练环境。



## 数据下载及预处理

数据地址: [Census-income Data](https://archive.ics.uci.edu/ml/datasets/Census-Income+(KDD) )

数据解压后, 在create_data.sh脚本文件中添加文件的路径,并运行脚本。

```sh
O
overlordmax 已提交
45 46 47 48 49 50 51
mkdir train_data
mkdir test_data
mkdir data
train_path="data/census-income.data"
test_path="data/census-income.test"
train_data_path="train_data/"
test_data_path="test_data/"
O
overlordmax 已提交
52

O
overlordmax 已提交
53 54
wget -P data/ https://archive.ics.uci.edu/ml/machine-learning-databases/census-income-mld/census.tar.gz
tar -zxvf data/census.tar.gz -C data/
O
overlordmax 已提交
55 56 57 58

python data_preparation.py --train_path ${train_path} \
                           --test_path ${test_path} \
                           --train_data_path ${train_data_path}\
O
overlordmax 已提交
59 60
                           --test_data_path ${test_data_path}

O
overlordmax 已提交
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
```

## 环境

 PaddlePaddle 1.7.0 

 python3.7 

## 单机训练

GPU环境

在train_gpu.sh脚本文件中设置好数据路径、参数。

```sh
O
overlordmax 已提交
76
python share_bottom.py  --use_gpu 1\  #使用gpu训练
O
overlordmax 已提交
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
                        --train_path data/data24913/train_data/\  #训练数据路径
                        --test_path data/data24913/test_data/\  #测试数据路径
                        --batch_size 32\  #设置batch_size大小
                        --feature_size 499\  #设置特征维度
                        --bottom_size 117\  #设置bottom网络大小
                        --tower_nums 2\  #设置tower数量
                        --tower_size 8\  #设置tower网络大小
                        --epochs 400  #设置epoch轮次
```

修改脚本的可执行权限并运行

```
./train_gpu.sh
```

CPU环境

在train_cpu.sh脚本文件中设置好数据路径、参数。

```sh
O
overlordmax 已提交
98
python share_bottom.py  --use_gpu 0\  #使用cpu训练
O
overlordmax 已提交
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
                        --train_path data/data24913/train_data/\  #训练数据路径
                        --test_path data/data24913/test_data/\  #测试数据路径
                        --batch_size 32\  #设置batch_size大小
                        --feature_size 499\  #设置特征维度
                        --bottom_size 117\  #设置bottom网络大小
                        --tower_nums 2\  #设置tower数量
                        --tower_size 8\  #设置tower网络大小
                        --epochs 400  #设置epoch轮次
```

修改脚本的可执行权限并运行

```
./train_cpu.sh
```



## 预测

本模型训练和预测交替进行,运行share_bottom.py即可得到预测结果

## 模型效果

epoch设置为100的训练和测试效果如下:

![](./image/share_bottom.png)

![](./image/share_bottom2.png)