DeepChem教程9:高级模型训练
到目前为止我们的模型训练按照如下简单的过程:加载数据集,创建模型,调用 fit()函数,评估模型,完成。这对于举例来说是可以的,但是实际的机器学习项目中过程通常更复杂。本教程我们看一下更真实的模型训练工作流程。
超参数优化
我们从加载HIV数据集开始。它基于是否抑制HIV复制酶来分类40000个分子。
In [1]:
import deepchem as dc
tasks, datasets, transformers = dc.molnet.load_hiv(featurizer='ECFP', split='scaffold')
train_dataset, valid_dataset, test_dataset = datasets
现在用数据集来训练模型。我们将使用MultitaskClassifier
, 它只是多个全链接层的堆叠。但是还有很多选项。要有多少层呢?每层的数目是多少呢?dropout应该是多少?学习速率是多少?
这些都叫超参数。标准的方法是试用多个值,用训练集来训练每一个模型,用验证集来评估模型,看哪个模型更好。你可以亲手这么做,但是让计算机来为你做更好。DeepChem提供了选择超参数的算法,可以在dc.hyper
包中找到。对于这个例子,我们使用
GridHyperparamOpt
,这是最基础的方法。我们只是给它每个超参数的参数列表,它会尽力的组合它们。
选项的列表由我们提供的
dict
定义。对于每一个模型参数,我们提供试用值的列表。本例我们考虑三种可能的隐藏层:宽度为
500
的单隐藏层,宽度为
1000
的单隐藏层,宽度为
1000
的双隐藏层。我们也考虑了两种
dropout率 (20% 和50%),以及两种学习速率(0.001 and 0.0001)。
In [2]:
params_dict = {