本示例用于LSTM模型训练和评估。
论文: Andrew L. Maas, Raymond E. Daly, Peter T. Pham, Dan Huang, Andrew Y. Ng, Christopher Potts。面向情绪分析学习词向量,Proceedings of the 49th Annual Meeting of the Association for Computational Linguistics: Human Language Technologies.2011
LSTM模型包含嵌入层、编码器和解码器这几个模块,编码器模块由LSTM层组成,解码器模块由全连接层组成。
在Ascend处理器上运行
# 运行训练示例
bash run_train_ascend.sh 0 ./aclimdb ./glove_dir
# 运行评估示例
bash run_eval_ascend.sh 0 ./preprocess lstm-20_390.ckpt
在GPU处理器上运行
# 运行训练示例
bash run_train_gpu.sh 0 ./aclimdb ./glove_dir
# 运行评估示例
bash run_eval_gpu.sh 0 ./aclimdb ./glove_dir lstm-20_390.ckpt
在CPU处理器上运行
# 运行训练示例
bash run_train_cpu.sh ./aclimdb ./glove_dir
# 运行评估示例
bash run_eval_cpu.sh ./aclimdb ./glove_dir lstm-20_390.ckpt
.
├── lstm
├── README.md # LSTM相关说明
├── script
│ ├── run_eval_ascend.sh # Ascend评估的shell脚本
│ ├── run_eval_gpu.sh # GPU评估的shell脚本
│ ├── run_eval_cpu.sh # CPU评估shell脚本
│ ├── run_train_ascend.sh # Ascend训练的shell脚本
│ ├── run_train_gpu.sh # GPU训练的shell脚本
│ └── run_train_cpu.sh # CPU训练的shell脚本
├── src
│ ├── config.py # 参数配置
│ ├── dataset.py # 数据集预处理
│ ├── imdb.py # IMDB数据集读脚本
│ ├── lr_schedule.py # 动态学习率脚步
│ └── lstm.py # 情感模型
├── eval.py # GPU、CPU和Ascend的评估脚本
└── train.py # GPU、CPU和Ascend的训练脚本
用法:train.py [-h] [--preprocess {true, false}] [--aclimdb_path ACLIMDB_PATH]
[--glove_path GLOVE_PATH] [--preprocess_path PREPROCESS_PATH]
[--ckpt_path CKPT_PATH] [--pre_trained PRE_TRAINING]
[--device_target {GPU, CPU, Ascend}]
Mindspore LSTM示例
选项:
-h, --help # 显示此帮助信息并退出
--preprocess {true, false} # 是否进行数据预处理
--aclimdb_path ACLIMDB_PATH # 数据集所在路径
--glove_path GLOVE_PATH # GloVe工具所在路径
--preprocess_path PREPROCESS_PATH # 预处理数据存放路径
--ckpt_path CKPT_PATH # 检查点文件保存路径
--pre_trained # 预训练的checkpoint文件路径
--device_target # 待运行的目标设备,支持GPU、CPU、Ascend。默认值:"Ascend"。
config.py:
GPU/CPU:
num_classes # 类别数
dynamic_lr # 是否使用动态学习率
learning_rate # 学习率
momentum # 动量
num_epochs # 轮次
batch_size # 输入数据集的批次大小
embed_size # 每个嵌入向量的大小
num_hiddens # 隐藏层特征数
num_layers # 栈式LSTM的层数
bidirectional # 是否双向LSTM
save_checkpoint_steps # 保存检查点文件的步数
Ascend:
num_classes # 类别数
momentum # 动量
num_epochs # 轮次
batch_size # 输入数据集的批次大小
embed_size # 每个嵌入向量的大小
num_hiddens # 隐藏层特征数
num_layers # 栈式LSTM的层数
bidirectional # 是否双向LSTM
save_checkpoint_steps # 保存检查点文件的步数
keep_checkpoint_max # 最多保存ckpt个数
dynamic_lr # 是否使用动态学习率
lr_init # 动态学习率的起始学习率
lr_end # 动态学习率的最终学习率
lr_max # 动态学习率的最大学习率
lr_adjust_epoch # 动态学习率在此epoch范围内调整
warmup_epochs # warmup的epoch数
global_step # 全局步数
下载aclImdb_v1数据集。
将aclImdb_v1数据集解压到任意路径,文件夹结构如下:
.
├── train # 训练数据集
└── test # 推理数据集
下载GloVe文件。
将glove.6B.zip解压到任意路径,文件夹结构如下:
.
├── glove.6B.100d.txt
├── glove.6B.200d.txt
├── glove.6B.300d.txt # 后续会用到这个文件
└── glove.6B.50d.txt
在glove.6B.300d.txt文件开头增加一行。
用来读取40万个单词,每个单词由300纬度的词向量来表示。
400000 300
在config.py中设置选项,包括loss_scale、学习率和网络超参。
运行在Ascend处理器上
执行sh run_train_ascend.sh进行训练。
bash run_train_ascend.sh 0 ./aclimdb ./glove_dir
上述shell脚本在后台执行训练,得到如下损失值:
# grep "loss is " log.txt
epoch: 1 step: 390, loss is 0.6003723
epcoh: 2 step: 390, loss is 0.35312173
...
在GPU处理器上运行
执行sh run_train_gpu.sh进行训练。
bash run_train_gpu.sh 0 ./aclimdb ./glove_dir
上述shell脚本在后台运行分布式训练,得到如下损失值:
# grep "loss is " log.txt
epoch: 1 step: 390, loss is 0.6003723
epcoh: 2 step: 390, loss is 0.35312173
...
运行在CPU处理器上
执行sh run_train_cpu.sh进行训练。
bash run_train_cpu.sh ./aclimdb ./glove_dir
上述shell脚本在后台执行训练,得到如下损失值:
# grep "loss is " log.txt
epoch: 1 step: 390, loss is 0.6003723
epcoh: 2 step: 390, loss is 0.35312173
...
在Ascend处理器上进行评估
执行bash run_eval_ascend.sh进行评估。
bash run_eval_ascend.sh 0 ./preprocess lstm-20_390.ckpt
在GPU处理器上进行评估
执行bash run_eval_gpu.sh进行评估。
bash run_eval_gpu.sh 0 ./aclimdb ./glove_dir lstm-20_390.ckpt
在CPU处理器上进行评估
执行bash run_eval_cpu.sh进行评估。
bash run_eval_cpu.sh 0 ./aclimdb ./glove_dir lstm-20_390.ckpt
| 参数 | LSTM (Ascend) | LSTM (GPU) | LSTM (CPU) |
|---|---|---|---|
| 资源 | Ascend 910 | Tesla V100-SMX2-16GB | Ubuntu X86-i7-8565U-16GB |
| 上传日期 | 2020-12-21 | 2020-08-06 | 2020-08-06 |
| MindSpore版本 | 1.1.0 | 0.6.0-beta | 0.6.0-beta |
| 数据集 | aclimdb_v1 | aclimdb_v1 | aclimdb_v1 |
| 训练参数 | epoch=20, batch_size=64 | epoch=20, batch_size=64 | epoch=20, batch_size=64 |
| 优化器 | Momentum | Momentum | Momentum |
| 损失函数 | SoftmaxCrossEntropy | SoftmaxCrossEntropy | SoftmaxCrossEntropy |
| 速度 | 1049 | 1022(单卡) | 20 |
| 损失 | 0.12 | 0.12 | 0.12 |
| 参数(M) | 6.45 | 6.45 | 6.45 |
| 推理检查点 | 292.9M(.ckpt文件) | 292.9M(.ckpt文件) | 292.9M(.ckpt文件) |
| 脚本 | LSTM脚本 | LSTM脚本 | LSTM脚本 |
| 参数 | LSTM (Ascend) | LSTM (GPU) | LSTM (CPU) |
|---|---|---|---|
| 资源 | Ascend 910 | Tesla V100-SMX2-16GB | Ubuntu X86-i7-8565U-16GB |
| 上传日期 | 2020-12-21 | 2020-08-06 | 2020-08-06 |
| MindSpore版本 | 1.1.0 | 0.6.0-beta | 0.6.0-beta |
| 数据集 | aclimdb_v1 | aclimdb_v1 | aclimdb_v1 |
| batch_size | 64 | 64 | 64 |
| 准确率 | 85% | 84% | 83% |
随机情况如下:
请浏览官网主页。