跳到主要内容

OpenBayes 下识别手写数字

如果你了解机器学习,特别是近年来非常流行的深度学习方法,那么你很可能听说过 MNIST 这个数据集。该数据集来自美国国家标准与技术研究所(National Institute of Standards and Technology,简称 NIST)。训练集(training set)由来自 250 个不同人手写的数字构成,测试集(test set)也是同样比例的手写数字数据。

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

PyTorch

获取代码

从 GitHub 下载样例代码:

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

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

.
├── openbayes.yaml
└── train.py

其中,

  1. .py 包含了执行机器学习模型训练和采用模型进行推断的代码
  2. openbayes.yaml 包含了执行一个「提交任务」的配置,更多信息见 openbayes cli 配置文件

创建第一个任务

注意

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

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

在 "新建容器" 页面下接入方式选择 Python 脚本执行,并将目录中 train.py 上传。在执行命令处输入命令:

python train.py

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

算力选择 CPU(如果有其他 GPU 类型,推荐选择 GPU 类型,速度会快很多),然后镜像选择「pytorch-1.8」,

提交任务后等待 15 秒左右的时间任务将开始执行,在容器页面可以看到日志所展示的执行情况。

TensorFlow

获取代码

从 GitHub 下载样例代码:

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

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

.
├── inference.py
├── openbayes.yaml
└── train.py

其中,

  1. .py 包含了执行机器学习模型训练和采用模型进行推断的代码
  2. openbayes.yaml 包含了执行一个「Python 脚本」的配置,更多信息见 openbayes cli 配置文件

创建第一个任务

注意

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

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

在 "新建容器" 页面下选择「提交任务」在执行命令处输入命令:

python train.py -o /openbayes/home -e 50 -m model.h5 -l ./tf_dir

其中:

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

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

下一步算力选择 CPU,镜像选择 "tensorflow-2.8",接入方式选择「提交任务」,并将目录中 train.py 文件上传。

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

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

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

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

用训练好的模型进行分类

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

这里将上一次的「工作目录」的绑定指向 /openbayes/home。更多有关「继续执行」的细节见容器的继续执行

修改指定执行命令:

python inference.py -m /openbayes/home/model.h5

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