Auto-Keras跑mnist数据集详解及最优结构可视化(亲测能运行)

之前试了很久,在成功安装完成最新的autokeras后,进行代码的调试,总是会出现这样或那样的错误,导致成功运行代码变得非常的困难。具体的困难程度可以在博客:Auto-Keras试水 感受一番。

主要原因是代码更新迭代的太快,许多代码的用法都发生了变化。基于此,这里新开一篇博客,贴出一个亲测能够成功训练、预测、储存并输出模型结构的代码。


训练&预测

(先改个默认路径)

import os
path = '/public/home/kanny/autokeras/'
os.chdir(path)

首先是进行训练以及预测,(注意,想要调用ImageClassifier,不能使用from autokeras.image_supervised import ImageClassifier,只能使用from autokeras.image.image_supervised import ImageClassifierfrom autokeras import ImageClassifier)接着运行如下的代码。

from keras.datasets import mnist
# from autokeras.image.image_supervised import ImageClassifier
from autokeras import ImageClassifier

(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)

运行clf.fit时,会开始搜索相对最好的网络结构(一个一个model的训练),如下图所示:

clf.final_fit则是跑前面表现最好的一个模型进行重新的训练,再到最后利用clf.evaluate来评估在测试集上面的表现。


导出及载入模型

官网(Auto-Keras Getting Started)上说明了可以使用下述代码进行模型的导出及储存:

clf.load_searcher().load_best_model().produce_keras_model().save('my_model.h5')

然而发现会报错。

不过我们可以选用另一种方式,将最优的模型进行储存(model_file_name.h5文件):

from autokeras import ImageClassifier
clf.export_autokeras_model(model_file_name)

导入:

model = pickle_from_file(model_file_name)
results = model.evaluate(x_test, y_test)
print(results)

这种方法虽然不会报错,但读进来不能与keras相通,就是用keras那一套再进行接下来的操作。同时如果想看看模型的结构,这里也用不了model.summary()或者plot出来。

这时我们可以用下面的语句进行导出储存及导入:

真正好用的命令

储存:

clf.export_keras_model('my_model.h5')

导入:

from keras.models import load_model
model = load_model('my_model.h5') 

这个时候导入进来的model就完全是keras那种,之后想怎么用keras那套就怎么用,不要太开心。这时我们就能够使用model.summary()来看看我们的模型,以及进行模型结构的可视化了。


模型结构可视化

其实可视化的代码非常简单,只有下面的两行,但是想运行起来就不是那么容易了。

from keras.utils import plot_model
plot_model(model, to_file='my_model.png')

注意,这里有个大坑。如果你的电脑是个正常的电脑或服务器,一定会报错,提示你没有安装pydotgraphviz。当天真的以为安装完这两个库你就错了,会有如下提示:

`pydot` failed to call GraphViz.Please install GraphViz (https://www.graphviz.org/) and ensure that its executables are in the $PATH.

这时实际的问题是:执行plot_model需要graphviz的二进制文件。需要在graphviz官网下载默认版本的,并添加进环境变量即可运行。(可参考:keras模型可视化plot_model模块调用报错

最后的最优的模型结构长下面这样,测试集准确率为99.31%。


写在最后

Auto-Keras好是好,也确实很方便,但一个mnist数据集在gpu服务器上还是跑了1天才出结果,速度还是太慢了一些,同时针对这么简单的数据集最后的网络结构也相对复杂,并且最后的结果还是比不上一些大牛们搭建出来的网络。

不过优点就是对一个深度学习小白,能够自动搭建一个还不错的网络结构,这个也非常不错。但做实际任务时,没办法直接用已知网络与权重做迁移学习,对新网络需要自己从头进行权重的训练,这部分也是非常耗时的。

所以具体的使用还是需要根据自己的项目,自己的需求来确定。

最后想起了网络上的一张图(侵删):

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页