OpenBayes 下识别手写数字

最后更新于

了解过机器学习,尤其是最近几年大热的深度学习方法的朋友很可能有听过过 MNIST 这个数据集,数据集来自美国国家标准与技术研究所,National Institute of Standards and Technology (NIST)。训练集(training set)由来自 250 个不同人手写的数字构成,测试集(test set)也是同样比例的手写数字数据。

我们这里就借用这个数据集来介绍在 OpenBayes 中采用 TensorFlow 进行图片的分类。其中会使用到 OpenBayes 的数据集绑定、模型的训练以及模型的使用。

获取代码

从 Github 下载样例代码:

git clone https://github.com/signcl/openbayes-mnist-example.git

切换到所下载代码目录看到代码结构如下:

.
├── code.zip
├── inference.py
├── input
│   └── mnist.npz
└── train.py

1 directory, 4 files

其中,

  1. .py 包含了执行机器学习模型训练和采用模型进行推断的代码
  2. input 包含了 mnist 的数据集

创建第一个任务

注意 这里介绍的是通过页面上传代码压缩包的流程,但是这已经不再是我们推荐的创建「Python 脚本」的最佳实践了,更好的方式参见 bayes 命令行工具入门

数据集准备好后在页面左侧导航栏点击「新建算力容器」创建一个 Python 脚本执行的任务,采用 train.py 训练一个 TensorFlow 的手写识别模型。

在 “新建容器” 的 “绑定数据” 处输入 MNIST 可以搜索到一个 MNIST 的数据集如下所示:

点击后页面将会展示所需要的数据集将会被绑定到「算力容器」的 /input0 目录下:

算力选择 CPU,镜像选择 “tensorflow-1.12”,接入方式选择 Python 脚本执行,并将目录中 *.py 文件压缩上传。

注意 在执行代码上传时,要注意所打包的代码层级,在当前目录下选中所要上传的文件后右键压缩,所提交的代码 inference.py train.py 才默认处于根目录下,如果将外层目录打包(即压缩 openbayes-mnist-example 目录),所获取的 .py 文件需以 openbayes-mnist-example/inference.py 的方式获取。

在执行命令处输入命令:

python train.py -i /input0 -o /output -e 10 -m model.h5 -l ./tf_dir

其中:

  1. train.py 为用于模型训练的 py 文件
  2. -i /input0 指明训练所需的 mnist.npz 所在目录
  3. -o /output 指明 BayesGear 所要保存的文件目录为 /output在 Python 脚本执行模式下,BayesGear 会将 /output 目录下的结果进行保存并上传,因此所有的输出结果都应保存在该目录下其他目录下,甚至包含默认的 . 目录下的文件更新都将不会被保存
  4. -e 10 指定了模型训练的 epoch
  5. -m model.h5 指明的保存的模型的名称,当然结合 -o /output 参数,最终的训练模型会存储到 /output/model.h5
  6. -l ./tf_dir 默认 ./tf_dir 指向 OpenBayes 取 TensorBoard 的目录

train.py 中参数的解析采用了 Python 内置的库 argparse 进行处理,更多内容见 argparse — Parser for command-line options, arguments and sub-commands

提交任务后等待 1 - 2 分钟的时间任务将开始执行。任务开启的时间通常与所绑定数据集大小有关,所需数据集越大,容器执行准备时间越长。在容器页面可以看到日志所展示的执行情况。

点击「TensorBoard 可视化」可以通过 TensorBoard 查看执行中的模型信息。

查看执行的目录以及输出结果

执行完毕后,点击容器页面的「输出」选项卡可以看到我们所指定的模型已经创建好了。

用训练好的模型进行分类

在获取了训练模型后,我们就可以用其对数据进行分类预估了。在已经完成了的执行页面点击右上角的「继续执行」,进入新的执行构建页面。

这里将上一次的「输出」的绑定指向「input1」。更过有关「继续执行」的细节见容器的继续执行

修改指定执行命令:

python inference.py -i /input0 -m /input1/model.h5

其中 -i /input0 指定 mnist.npz 所在目录;-m /input1/model.h5 指定需要载入的模型的目录。提交并执行完毕后,可以看到日志中展示了对 10000 测试结果获取了 98% 的准确率。