You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

README_CN.md 12 kB

5 years ago
5 years ago
5 years ago
4 years ago
5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. [View English](./README.md)
  2. # 目录
  3. <!-- TOC -->
  4. - [目录](#目录)
  5. - [LSTM概述](#lstm概述)
  6. - [模型架构](#模型架构)
  7. - [数据集](#数据集)
  8. - [环境要求](#环境要求)
  9. - [快速入门](#快速入门)
  10. - [脚本说明](#脚本说明)
  11. - [脚本和样例代码](#脚本和样例代码)
  12. - [脚本参数](#脚本参数)
  13. - [训练脚本参数](#训练脚本参数)
  14. - [运行选项](#运行选项)
  15. - [网络参数](#网络参数)
  16. - [准备数据集](#准备数据集)
  17. - [训练过程](#训练过程)
  18. - [评估过程](#评估过程)
  19. - [模型描述](#模型描述)
  20. - [性能](#性能)
  21. - [训练性能](#训练性能)
  22. - [评估性能](#评估性能)
  23. - [随机情况说明](#随机情况说明)
  24. - [ModelZoo主页](#modelzoo主页)
  25. <!-- /TOC -->
  26. # LSTM概述
  27. 本示例用于LSTM模型训练和评估。
  28. [论文](https://www.aclweb.org/anthology/P11-1015/): Andrew L. Maas, Raymond E. Daly, Peter T. Pham, Dan Huang, Andrew Y. Ng, Christopher Potts。[面向情绪分析学习词向量](https://www.aclweb.org/anthology/P11-1015/),Proceedings of the 49th Annual Meeting of the Association for Computational Linguistics: Human Language Technologies.2011
  29. # 模型架构
  30. LSTM模型包含嵌入层、编码器和解码器这几个模块,编码器模块由LSTM层组成,解码器模块由全连接层组成。
  31. # 数据集
  32. - aclImdb_v1用于训练评估。[大型电影评论数据集](http://ai.stanford.edu/~amaas/data/sentiment/)
  33. - 单词表示形式的全局矢量(GloVe):用于单词的向量表示。[GloVe](https://nlp.stanford.edu/projects/glove/)
  34. # 环境要求
  35. - 硬件(GPU/CPU/Ascend)
  36. - 准备Ascend或GPU处理器搭建硬件环境。
  37. - 框架
  38. - [MindSpore](https://www.mindspore.cn/install)
  39. - 更多关于Mindspore的信息,请查看以下资源:
  40. - [MindSpore教程](https://www.mindspore.cn/tutorial/training/zh-CN/master/index.html)
  41. - [MindSpore Python API](https://www.mindspore.cn/doc/api_python/zh-CN/master/index.html)
  42. # 快速入门
  43. - 在Ascend处理器上运行
  44. ```bash
  45. # 运行训练示例
  46. bash run_train_ascend.sh 0 ./aclimdb ./glove_dir
  47. # 运行评估示例
  48. bash run_eval_ascend.sh 0 ./preprocess lstm-20_390.ckpt
  49. ```
  50. - 在GPU处理器上运行
  51. ```bash
  52. # 运行训练示例
  53. bash run_train_gpu.sh 0 ./aclimdb ./glove_dir
  54. # 运行评估示例
  55. bash run_eval_gpu.sh 0 ./aclimdb ./glove_dir lstm-20_390.ckpt
  56. ```
  57. - 在CPU处理器上运行
  58. ```bash
  59. # 运行训练示例
  60. bash run_train_cpu.sh ./aclimdb ./glove_dir
  61. # 运行评估示例
  62. bash run_eval_cpu.sh ./aclimdb ./glove_dir lstm-20_390.ckpt
  63. ```
  64. # 脚本说明
  65. ## 脚本和样例代码
  66. ```shell
  67. .
  68. ├── lstm
  69.    ├── README.md # LSTM相关说明
  70.    ├── script
  71.    │   ├── run_eval_ascend.sh # Ascend评估的shell脚本
  72.    │   ├── run_eval_gpu.sh # GPU评估的shell脚本
  73.    │   ├── run_eval_cpu.sh # CPU评估shell脚本
  74.    │   ├── run_train_ascend.sh # Ascend训练的shell脚本
  75.    │   ├── run_train_gpu.sh # GPU训练的shell脚本
  76.    │   └── run_train_cpu.sh # CPU训练的shell脚本
  77.    ├── src
  78.    │   ├── config.py # 参数配置
  79.    │   ├── dataset.py # 数据集预处理
  80.    │   ├── imdb.py # IMDB数据集读脚本
  81.    │   ├── lr_schedule.py # 动态学习率脚步
  82.    │   └── lstm.py # 情感模型
  83.    ├── eval.py # GPU、CPU和Ascend的评估脚本
  84.    └── train.py # GPU、CPU和Ascend的训练脚本
  85. ```
  86. ## 脚本参数
  87. ### 训练脚本参数
  88. ```python
  89. 用法:train.py [-h] [--preprocess {true, false}] [--aclimdb_path ACLIMDB_PATH]
  90. [--glove_path GLOVE_PATH] [--preprocess_path PREPROCESS_PATH]
  91. [--ckpt_path CKPT_PATH] [--pre_trained PRE_TRAINING]
  92. [--device_target {GPU, CPU, Ascend}]
  93. Mindspore LSTM示例
  94. 选项:
  95. -h, --help # 显示此帮助信息并退出
  96. --preprocess {true, false} # 是否进行数据预处理
  97. --aclimdb_path ACLIMDB_PATH # 数据集所在路径
  98. --glove_path GLOVE_PATH # GloVe工具所在路径
  99. --preprocess_path PREPROCESS_PATH # 预处理数据存放路径
  100. --ckpt_path CKPT_PATH # 检查点文件保存路径
  101. --pre_trained # 预训练的checkpoint文件路径
  102. --device_target # 待运行的目标设备,支持GPU、CPU、Ascend。默认值:"Ascend"。
  103. ```
  104. ### 运行选项
  105. ```python
  106. config.py:
  107. GPU/CPU:
  108. num_classes # 类别数
  109. dynamic_lr # 是否使用动态学习率
  110. learning_rate # 学习率
  111. momentum # 动量
  112. num_epochs # 轮次
  113. batch_size # 输入数据集的批次大小
  114. embed_size # 每个嵌入向量的大小
  115. num_hiddens # 隐藏层特征数
  116. num_layers # 栈式LSTM的层数
  117. bidirectional # 是否双向LSTM
  118. save_checkpoint_steps # 保存检查点文件的步数
  119. Ascend:
  120. num_classes # 类别数
  121. momentum # 动量
  122. num_epochs # 轮次
  123. batch_size # 输入数据集的批次大小
  124. embed_size # 每个嵌入向量的大小
  125. num_hiddens # 隐藏层特征数
  126. num_layers # 栈式LSTM的层数
  127. bidirectional # 是否双向LSTM
  128. save_checkpoint_steps # 保存检查点文件的步数
  129. keep_checkpoint_max # 最多保存ckpt个数
  130. dynamic_lr # 是否使用动态学习率
  131. lr_init # 动态学习率的起始学习率
  132. lr_end # 动态学习率的最终学习率
  133. lr_max # 动态学习率的最大学习率
  134. lr_adjust_epoch # 动态学习率在此epoch范围内调整
  135. warmup_epochs # warmup的epoch数
  136. global_step # 全局步数
  137. ```
  138. ### 网络参数
  139. ## 准备数据集
  140. - 下载aclImdb_v1数据集。
  141. 将aclImdb_v1数据集解压到任意路径,文件夹结构如下:
  142. ```bash
  143. .
  144. ├── train # 训练数据集
  145. └── test # 推理数据集
  146. ```
  147. - 下载GloVe文件。
  148. 将glove.6B.zip解压到任意路径,文件夹结构如下:
  149. ```bash
  150. .
  151. ├── glove.6B.100d.txt
  152. ├── glove.6B.200d.txt
  153. ├── glove.6B.300d.txt # 后续会用到这个文件
  154. └── glove.6B.50d.txt
  155. ```
  156. 在`glove.6B.300d.txt`文件开头增加一行。
  157. 用来读取40万个单词,每个单词由300纬度的词向量来表示。
  158. ```bash
  159. 400000 300
  160. ```
  161. ## 训练过程
  162. - 在`config.py`中设置选项,包括loss_scale、学习率和网络超参。
  163. - 运行在Ascend处理器上
  164. 执行`sh run_train_ascend.sh`进行训练。
  165. ``` bash
  166. bash run_train_ascend.sh 0 ./aclimdb ./glove_dir
  167. ```
  168. 上述shell脚本在后台执行训练,得到如下损失值:
  169. ```shell
  170. # grep "loss is " log.txt
  171. epoch: 1 step: 390, loss is 0.6003723
  172. epcoh: 2 step: 390, loss is 0.35312173
  173. ...
  174. ```
  175. - 在GPU处理器上运行
  176. 执行`sh run_train_gpu.sh`进行训练。
  177. ``` bash
  178. bash run_train_gpu.sh 0 ./aclimdb ./glove_dir
  179. ```
  180. 上述shell脚本在后台运行分布式训练,得到如下损失值:
  181. ```shell
  182. # grep "loss is " log.txt
  183. epoch: 1 step: 390, loss is 0.6003723
  184. epcoh: 2 step: 390, loss is 0.35312173
  185. ...
  186. ```
  187. - 运行在CPU处理器上
  188. 执行`sh run_train_cpu.sh`进行训练。
  189. ``` bash
  190. bash run_train_cpu.sh ./aclimdb ./glove_dir
  191. ```
  192. 上述shell脚本在后台执行训练,得到如下损失值:
  193. ```shell
  194. # grep "loss is " log.txt
  195. epoch: 1 step: 390, loss is 0.6003723
  196. epcoh: 2 step: 390, loss is 0.35312173
  197. ...
  198. ```
  199. ## 评估过程
  200. - 在Ascend处理器上进行评估
  201. 执行`bash run_eval_ascend.sh`进行评估。
  202. ``` bash
  203. bash run_eval_ascend.sh 0 ./preprocess lstm-20_390.ckpt
  204. ```
  205. - 在GPU处理器上进行评估
  206. 执行`bash run_eval_gpu.sh`进行评估。
  207. ``` bash
  208. bash run_eval_gpu.sh 0 ./aclimdb ./glove_dir lstm-20_390.ckpt
  209. ```
  210. - 在CPU处理器上进行评估
  211. 执行`bash run_eval_cpu.sh`进行评估。
  212. ``` bash
  213. bash run_eval_cpu.sh 0 ./aclimdb ./glove_dir lstm-20_390.ckpt
  214. ```
  215. # 模型描述
  216. ## 性能
  217. ### 训练性能
  218. | 参数 | LSTM (Ascend) | LSTM (GPU) | LSTM (CPU) |
  219. | -------------------------- | -------------------------- | -------------------------------------------------------------- | -------------------------- |
  220. | 资源 | Ascend 910 | Tesla V100-SMX2-16GB | Ubuntu X86-i7-8565U-16GB |
  221. | 上传日期 | 2020-12-21 | 2020-08-06 | 2020-08-06 |
  222. | MindSpore版本 | 1.1.0 | 0.6.0-beta | 0.6.0-beta |
  223. | 数据集 | aclimdb_v1 | aclimdb_v1 | aclimdb_v1 |
  224. | 训练参数 | epoch=20, batch_size=64 | epoch=20, batch_size=64 | epoch=20, batch_size=64 |
  225. | 优化器 | Momentum | Momentum | Momentum |
  226. | 损失函数 | SoftmaxCrossEntropy | SoftmaxCrossEntropy | SoftmaxCrossEntropy |
  227. | 速度 | 1049 | 1022(单卡) | 20 |
  228. | 损失 | 0.12 | 0.12 | 0.12 |
  229. | 参数(M) | 6.45 | 6.45 | 6.45 |
  230. | 推理检查点 | 292.9M(.ckpt文件) | 292.9M(.ckpt文件) | 292.9M(.ckpt文件) |
  231. | 脚本 | [LSTM脚本](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/nlp/lstm) | [LSTM脚本](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/nlp/lstm) | [LSTM脚本](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/nlp/lstm) |
  232. ### 评估性能
  233. | 参数 | LSTM (Ascend) | LSTM (GPU) | LSTM (CPU) |
  234. | ------------------- | ---------------------------- | --------------------------- | ---------------------------- |
  235. | 资源 | Ascend 910 | Tesla V100-SMX2-16GB | Ubuntu X86-i7-8565U-16GB |
  236. | 上传日期 | 2020-12-21 | 2020-08-06 | 2020-08-06 |
  237. | MindSpore版本 | 1.1.0 | 0.6.0-beta | 0.6.0-beta |
  238. | 数据集 | aclimdb_v1 | aclimdb_v1 | aclimdb_v1 |
  239. | batch_size | 64 | 64 | 64 |
  240. | 准确率 | 85% | 84% | 83% |
  241. # 随机情况说明
  242. 随机情况如下:
  243. - 轮换数据集。
  244. - 初始化部分模型权重。
  245. # ModelZoo主页
  246. 请浏览官网[主页](https://gitee.com/mindspore/mindspore/tree/master/model_zoo)。