之前一直使用Keras进行深度学习的一些项目,其中最难受的就是找最适合数据集的网络,需要各种尝试。但最近出了一个叫Auto-Keras
的库,其可以通过在大型计算图中搜索最优子图来学习发现最适合训练数据集的神经网络结构,简言之,就是可以自动选取最优的网络,最终目标就是让所有领域的只需很少的数据科学或者机器学习背景的人都可以很轻松便捷地使用深度学习。
于是按捺不住躁动的内心,决定试试水,看看到底有没有论文说的那么神。
一些参考网址与文献
- 官方网站:https://autokeras.com/
- 项目github:https://github.com/jhfjhfj1/autokeras
- TensorFlow版本:https://github.com/melodyguan/enas
- PyTorch 版本:https://github.com/carpedm20/ENAS-pytorch
- 论文:《Efficient Neural Architecture Search via Parameter Sharing》
初次试水安装autokeras
首先我们按照官方网站的方法进行安装,注意:Auto-Keras
暂时只支持Python3.6。
pip install autokeras
但是到这里就会直接报错:
Could not find a version that satisfies the requirement torch==0.4.1 (from autokeras) (from versions: 0.1.2, 0.1.2.post1)
No matching distribution found for torch==0.4.1 (from autokeras)
说torch
版本太低了,只有0.4.1的才行,然后就去PyTorch官网(https://pytorch.org/)下载相应版本的torch。
按照要求安装之后,再更新tensorflow-gpu
,运行就接着说我的CUDA版本太低,需要安装9.0版本。装完后重启计算机,再去网站安装cuDNN 7,并设置环境变量。最后在Python中运行import autokeras
,终于成功!
中间的配置过程非常的繁琐,并且因人而异,不足为外人道也。如果你在安装时出现了问题,可以直接在博客下方评论,如果是自己遇到的问题,也会尽力去帮助大家!
测试
我们使用官网中的代码进行测试:
from keras.datasets import mnist
# from autokeras.image_supervised import ImageClassifier
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)
但可能配置环境还是出现了问题,代码运行后一直卡在下图所示的位置,之后运行出结果再来更新结果。
2018.11.13更新
遇到这个问题在评论区有大神说是因为autokeras
依赖fork
,而os.fork()
无法在Windows
上运行,因此会出现这种情况,可供参考。
但另外还发现有博客:autoKeras Windows 的入门测试,可以在Windows
环境下运行。
不过我这边用的IDE是Spyder
,那边用的是Visual Studio
,并且我将其数据集下载,并尝试复现其代码,发现同样会卡在上图所示界面,并不能成功运行。
不知是否环境配置原因导致了这样的现象出现。 也希望能够请各位多多指教~!
2019.1.20更新
在GPU服务器上测试,终于是动起来了。但是需要注意代码需要进行一定的变动:前面的from autokeras.image_supervised import ImageClassifier
会报错,这里修改成from autokeras import ImageClassifier
即可正常运行,如下所示:
from keras.datasets import mnist
from autokeras 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)
下面为运行时截图,基本每个epoch运行20s左右,会自动一个model一个model的train。
最后的结果还是不错:
最终的结果准确率有99.57%,已经优于现在很多网络框架了(这次测试结果的框架被我测试的时候覆盖了没有保存。。。后面没有重现出这么高的准确率了)。
关于Auto-Keras
详细代码的介绍,可以参考博客:Auto-Keras跑mnist数据集详解及最优结构可视化(亲测能运行)
后面有空会开一个博客说说autoKeras的实现原理,顺便自己学一学~