Auto Keras是一个开源的自动化机器学习软件库(AutoML)官网。
它是由德州农工大学的数据实验室和社区贡献者开发的。AutoML 的最终目标是为数据科学和机器学习领域提供易于访问的深度学习工具。AutoKeras 提供了自动搜索深层学习模型的体系结构和超参数的功能。
安装
方法1 - pip 安装
pip install autokeras
目前 Autokeras 只支持 Python 3.6。Win10 下载可能会遇到 torch 版本的问题,解决方法:先手动下载对应的 torch 版本,再进行安装。如若还不行,则降低 Autokeras 的安装版本。
方法2 - 手动安装
从 AutoKeras 的 github repo下载项目,并在下载项目下面运行:
pip install -r requirements.txt
python setup.py install
架构分析
算法流程如图所示
网络结构表示
Autokeras 的网络结构用 keras 的图模型 graph 表示。
graph 类中的每个节点都是层之间的中间张量,每一层都是图中的一条边。
graph 类中包含所有节点 (包括它们的 shape 和 id)、所有的层(包含 层 本身和它们的 id)、关系(层和输入节点、输出节点的关系以及邻接矩阵)。
若用Pytorch 框架进行训练, autokeras会将 graph 实例转换成 Pytorch 的神经网络类。
初始化模型
程序初始化会将网络模块放入生成器作为种子。网络模块包括 MlpModule 和 CnnModule。
CnnModule 的generators是个列表,包括了三个生成器: CnnGenerator,
ResNetGenerator 和
DenseNetGenerator分别用于生成一般的CNN,ResNe和DenseNet。CnnGenerator 包含了 conv, dropout, global-avg-pooling,pooling, batch_norm 等层结构,初始默认生成三层卷积层的网络结构。如下图:
初始时生成三个对应的model,分别为CNN, ResNet, DenseNet。
训练
程序会将所有的model放进training queue(训练队列)中,然后开始弹出model并且训练,得到model在相应数据集中的评分,这个训练只为了评估,因此不需要充分训练以节省资源。与此同时进行网络结构的搜索。
搜索
在搜索的过程中,对于model和它们训练得到的评估进行排序放入搜索队列,在时间允许的范围内,循环下面过程:
对队列中的model(先进先出,先出的是评估好的)采用退火算法判断是(exploit) 否 (explore) 要对网络结构进行 Morphism。假如产生了变形且变形结果并不在已有的model里面,用高斯过程回归估计它的acq分数,
在循环过程中记录acq最高的网络,最后返回这个网络加入model list中和训练队列中。程序训练这个model得到对应的评分,然后更新数据。
训练和搜索是同时进行的,双进程进行。
Network Morphism
上面提到了 Network Morphism。在 autokeras 中提供了以下几种变形:深度、宽度和层之间的连接。Morphism 是随机的,例如选择哪种变形方式是随机的。当选择增加宽度时,选取加宽哪一层也是随机的。
使用方法
简单示例
Autokeras 的目标是提供方便使用的自动搜索网络结构的工具,因此它的示例的核心代码简洁明了。
示例代码:
from keras.datasets import mnist
from autokeras.image.image_supervised import ImageClassifier
if __name__ == '__main__':
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape + (1,))
x_test = x_test.reshape(x_test.shape + (1,))
clf = ImageClassifier(verbose=True)
clf.fit(x_train, y_train, time_limit=12 * 60 * 60)
clf.final_fit(x_train, y_train, x_test, y_test, retrain=True)
y = clf.evaluate(x_test, y_test)
print(y)
基本步骤
1.数据预处理
2.模型初始化
3.程序开始自动生成、训练、搜索和更新网络结构,fit 函数时的训练并不充分,因此需要用 final_fit 函数对最终的网络结构进行充分的训练。
4.对得到的最优网络结构进行评估。
模型的导出和载入
from autokeras import ImageClassifier
from autokeras.utils import pickle_from_file
clf = ImageClassifier(verbose=True, augment=False) #模型初始化
clf.export_autokeras_model(model_file_name) #导出模型
model = pickle_from_file(model_file_name) #载入模型
results = model.evaluate(x_test, y_test)
print(results)
模型可视化
Autokeras 的网络结构 keras 的图模型表示,因此可以使用 keras 的可视化方法来查看生成的网络结构。官网本身也提供了简单的方法。无论使用哪种,都需要先下载安装 Graphviz 软件,然后运行
pip: pip install graphviz
conda : conda install -c conda-forge python-graphviz
官网可视化方法如下:
step1:在模型训练之前定义路径
clf = ImageClassifier(path="~/automodels/",verbose=True, augment=False) # Give a custom path of your choice
step2: 在模训练完成后,运行examples/visualize.py,并将上述路径作为参数传递。
if __name__ == '__main__':
visualize('~/automodels/')
任务模块的使用方法
Autokeras 为不同的任务定义了一些类,包括 ImageClassifier,ImageRegressor, TextClassifier, TextRegressor,TabularClassifier,TabularRegressor等,使用方法示例如下:
clf = TextClassifier(verbose=True)
clf.fit(x=x_train, y=y_train, time_limit=12 * 60 * 60)
值得注意的是:类 TextClassifier 和 TextRegressor 包含文本数据的预处理。这意味着输入数据应该是字符串格式的。默认的预处理模型使用斯坦福大学nlp的glove6b模型。要更改预处理模型的默认设置,需要更改相应的变量:constant.py 文件中的 EMBEDDING_DIM ,PRE_TRAIN_FILE_LINK,PRE_TRAIN_FILE_LINK, PRE_TRAIN_FILE_NAME.
预训练模型
Autokeras 提供了几个以及预训练好的模型:ObjectDetector, SentimentAnalysis, TopicClassifier, VoiceGenerator等,具体可在autokeras/pretrained/文件夹和 官网找到有预训练的模型和对应的数据集。使用方法示例如下:
from autokeras.pretrained.object_detector import ObjectDetector
detector = ObjectDetector()
总结
Autokeras能够通过简单的代码实现适应数据的神经网络搜索。
Autokeras采用了退火算法实现了开发和探索,采用了高斯过程回归预估更优秀的网络结构。
Autokeras能完成分类和回归问题。
Open for comments and suggestions!
2738073913@qq.com
鹏城实验室人工智能中心