之前试了很久,在成功安装完成最新的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 ImageClassifier
或from 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')
注意,这里有个大坑。如果你的电脑是个正常的电脑或服务器,一定会报错,提示你没有安装pydot
与graphviz
。当天真的以为安装完这两个库你就错了,会有如下提示:
`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天才出结果,速度还是太慢了一些,同时针对这么简单的数据集最后的网络结构也相对复杂,并且最后的结果还是比不上一些大牛们搭建出来的网络。
不过优点就是对一个深度学习小白,能够自动搭建一个还不错的网络结构,这个也非常不错。但做实际任务时,没办法直接用已知网络与权重做迁移学习,对新网络需要自己从头进行权重的训练,这部分也是非常耗时的。
所以具体的使用还是需要根据自己的项目,自己的需求来确定。
最后想起了网络上的一张图(侵删):