如何利用Cloud ML Engine在云中训练机器学习模型?

在云中训练ML模型很有意义。为什么?

如何利用Cloud ML Engine在云中训练机器学习模型?

有许多原因,首先它支持你在大规模数据计算的同时还可以训练模型。另外,在GoogleCloud平台上,你可以使用Cloud Machine Learning Engine在TensorFlow和其他PythonML库(如Scikit-Learning)中训练机器学习模型,而无需操心任何基础设置。当然,前提是你将代码放入了Python包。

如何利用Cloud ML Engine在云中训练机器学习模型?

task.py文件

作为一名资深人士,作者表示许多新手面临的第一个困难就是创建task.py文件。虽然你可以不使用task.py文件(参见下面),但作者认为使用它还是有必要的。因为它允许你将超参数从模型逻辑中分离出来(位于model.py)。task.py文件的用途有两个:

1,读取和解析模型参数,如训练数据和输出模型的位置、隐藏层、大小等。

2,调用model.py

如何利用Cloud ML Engine在云中训练机器学习模型?

编写task.py 有许多种方法- -你甚至可以给它取新名字。事实上task.py和model.py也仅仅是 一种约定俗成的叫法。只要你愿意,我们也可以叫它们为task.py aReallyCoolArgument_parser.py 和model.py very_deeeep_model.py。

我们甚至可以将它俩组合成一个文件,用于参数解析和模型训练。除了将代码放到Python包外,ML对其他并没有什么要求。(也就是说,它必须包含setup.py和__init__.py,对其他则没有什么要求)。但是,要把task.py和model.py在一个文件夹中训练,你需要查看Cloud ML样本和Cloud ML训练反馈记录,了解使用Cloud ML引擎的完整示例和关于task.py、model.py的实例。

通过docopt编写“干净的” task.py文件

虽然很多人喜欢使用Argparse编写task.py(Argparse,一个用于解析命令行参数的标准Python库),但作者更喜欢用docopt。因为作者认为这是编写task.py最简洁的方式。他表示如果使用docopt,你编写的唯一东西就是程序的用法信息(即帮助信息),其他的docopt会帮你处理好。它会根据你在模块的文档字符串中编写的用法消息,和你在文档字符串中指定的格式为你生成参数解析器。这里是具体实例。

如何利用Cloud ML Engine在云中训练机器学习模型?

现在作者要对它们进行拆分。第一块代码表示你的task.py的用途。如果你调用task.py时没有添加参数或错误调用,它会对用户(你)进行反馈。

最后是将这些参数变量分配到model.py,然后进行训练和评估。

需要补充的是,task.py是Python包中的一部分。在实践中,你需要花费大量时间编写model.py,创建task.py,其余都有样本可寻。

如何利用Cloud ML Engine在云中训练机器学习模型?

因为我们是使用docopt编写task.py,所以我们必须将它添加到setup.py(如下图)。

如何利用Cloud ML Engine在云中训练机器学习模型?

最后,一旦我们有了上述结构中的文件,我们就可以向ML引擎进行提交。但这之前,我们首先得使用python -m在本地测试我们的包,然后使用ML引擎进行局部预测。(这两个步骤是可以跳过的。但作者并不建议跳过。)

如何利用Cloud ML Engine在云中训练机器学习模型?

如何利用Cloud ML Engine在云中训练机器学习模型?

一旦测试完毕,我们需要把我们的工作产品提交给ML引擎。

如何利用Cloud ML Engine在云中训练机器学习模型?

下图与我们讨论的东西有关

如何利用Cloud ML Engine在云中训练机器学习模型?

第一行表示我们包的位置,我们通常称其为trainer(一种惯例)。第二行表示我们在trainer中调用任务模块(task.py)。

结语

通过建立一个task.py我们可以将超参数处理为命令行参数,这方便了我们将模型与超参数分离。一个关键的优势是,这使我们可以使用不同的参数来确定最佳的超参数集。最后,docopt会基于用户写入的字符串完善我们的task.py文件。

希望这些能对你有所帮助。


分享到:


相關文章: