使用Mindspore 0.3运行lstm_aclImdb

这个周末参加了华为mindspore社区举办的Mindspore集训营第二期的活动。

这一期的内容为:

MindSpore的WASM与Rust实验

基于eBPF的AI_Kernel观测

轻松使用Volcano和Kubeflow进行分布式部署

MindSpore_QuickStart之LSTM讲解_LSTM

MindSpore二阶优化详解_二阶优化

一共有3个作业,基本上跟着教程一步一步来都能完成

Mindspore 0.3.0也在这期间发布了。

安装Mindspore 0.3.0的步骤可以参考

image.png

这个页面中根据自己实际情况选择,然后复制安装命令到终端中去运行即可

下面通过流水账形式把整个过程讲述一下这一期训练营其中的一个作业:

使用Mindspore 0.3运行lstm_aclImdb

第一步:通过git 把mindspore 拷贝到本地运行

git clone https://gitee.com/mindspore/mindspore

第二步:进入到example/lstm_aclImdb 文件夹

cd mindspore/example/lstm_aclImdb/

第三步:下载数据文件

这一次实验主要会用到两个数据:allmdb_v1和GloVe.6B.

这两个数据的下载地址如下:

 

 

http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz

http://nlp.stanford.edu/data/glove.6B.zip

 

如果觉得下载速度慢的话我网盘里也存放了一份:
提取码:8rcy

 

第四步:将数据文件解压到lstm_aclImdb文件夹中

 

glove.6B.zip:

unzip glove.6B.zip -d ./glove

文件夹结构如下

glove
├── glove.6B.100d.txt
├── glove.6B.200d.txt
├── glove.6B.300d.txt    # we will use this one later.
└── glove.6B.50d.txt

aclImdb_v1.tar.gz:

tar -xvzf aclImdb_v1.tar.gz

文件结构如下:

allmdb
├── train # train dataset
└── test # infer dataset

第五步:安装gensim

通过pip install gensim 命令安装gensim

第六步:执行程序

如果直接去执行训练程序train.py

python train.py --preprocess=true --aclimdb_path=./aclImdb --glove_path=./glove --ckpt_path=./ckpt

会出现以下错误:

============== Starting Data Pre-processing ==============
Traceback (most recent call last):
  File "train.py", line 55, in <module>
    convert_to_mindrecord(cfg.embed_size, args.aclimdb_path, args.preprocess_path, args.glove_path)
  File "/root/mindspore/example/lstm_aclImdb/dataset.py", line 82, in convert_to_mindrecord
    parser.parse()
  File "/root/mindspore/example/lstm_aclImdb/imdb.py", line 51, in parse
    self.__wvmodel = gensim.models.KeyedVectors.load_word2vec_format(self.__glove_file)
  File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/gensim/models/keyedvectors.py", line 1498, in load_word2vec_format
    limit=limit, datatype=datatype)
  File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/gensim/models/utils_any2vec.py", line 344, in _load_word2vec_format
    vocab_size, vector_size = (int(x) for x in header.split())  # throws for invalid file format
  File "/root/miniconda3/envs/myconda/lib/python3.7/site-packages/gensim/models/utils_any2vec.py", line 344, in <genexpr>
    vocab_size, vector_size = (int(x) for x in header.split())  # throws for invalid file format
ValueError: invalid literal for int() with base 10: 'the'

应该是glove.6B.300d.txt文件需要重新过一下,这个问题我采取的方法是

python -m gensim.scripts.glove2word2vec --input  ./glove/glove.6B.300d.txt --output ./glove/glove.6B.300d.w2vformat.txt

随后通过两个命令

mv glove/glove.6B.300d.txt glove/glove.6B.300d.txt.bak
mv glove/glove.6B.300d.w2vformat.txt glove/glove.6B.300d.txt

将原来的文件备份为 glove/glove.6B.300d.txt.bak,将转换后的文件重命名为glove.6B.300d.txt

执行训练程序train.py

python train.py --preprocess=true --aclimdb_path=./aclImdb --glove_path=./glove --ckpt_path=./ckpt

现在就可以看到程序开始正常运行预处理了

image.png

程序正在进行预处理,稍微等待一会后就会看见程序开始训练了

image.png

config.py文件中定义的epoch为20,所以需要迭代20次,慢慢等待即可。

image.png

看到 Train Sucess出来说明训练完成了。下面我们去文件夹下ckpt目录下看看生成的checkpoint文件

image.png

第七步:执行验证程序eval.py

这边我们选择最近的一个epoch,也就是第20个epoch进行验证.

python eval.py --ckpt_path=./ckpt/lstm-20_390.ckpt

验证结果:0.8406650641025641

image.png

至此,整个lstm_aclImdb计算运行完了,有兴趣的可以更改不同的ckpt文件看看不同的ckpt文件的结果。整个运行过程记录可能存在有不对的地方,欢迎指出和批评。

posted @ 2021-12-20 15:36  MS小白  阅读(64)  评论(0)    收藏  举报