文档:https://autokeras.com/
代码:https://github.com/keras-team/autokeras
参考:https://www.cnblogs.com/hutao722/p/9553526.html
AutoKeras可以完成分类任务的神经网络搜索。
感受到auto的强大,并且还有AutoKeras还是开源的,就赶紧来试试这最新的技术了。
安装
打开开发文档,就看到了可爱的docker,当然就首选它进行安装了。
docker pull garawalid/autokeras:latest
下载镜像后,就可以直接用了:
docker run -it --shm-size 2G garawalid/autokeras /bin/bash
测试等操作详见文档https://autokeras.com/docker/,可以跳过,我们往下走。
简单分类
上述代码可以完成简单的mnist的分类
1.加载mnist数据。
2.使用ImageClassifier分类器。
3.fit函数开始训练,time_limit可设置搜索时间,代码中设置为12小时。
4.final_fit找到最优模型后,再最后进行一次训练和验证。
5.evaluate评估模型。
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)
训练自己的数据集
有了上边的基础,对于基本操作已经有较好的理解了。我们可以尝试训练自己的数据集。
数据准备
参考文档:https://autokeras.com/start/
可以使用load_image_dataset函数加载数据。包括csv_file_path和images_path两个参数。
from autokeras.image.image_supervised import load_image_dataset
x_train, y_train = load_image_dataset(csv_file_path="train/label.csv",
images_path="train")
print(x_train.shape)
print(y_train.shape)
x_test, y_test = load_image_dataset(csv_file_path="test/label.csv",
images_path="test")
print(x_test.shape)
print(y_test.shape)
csv_file_path中的csv文件格式如下,包含图片名以及label信息。
File Name,Label
00000.jpg,5
00001.jpg,0
00002.jpg,4
00003.jpg,1
00004.jpg,9
00005.jpg,2
00006.jpg,1
...
将图像名称保存到images中,对应标签放到labels中,即可划分好训练集和测试集(4:1),并保存可用的csv文件。
import os
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
images = []
labels = []
X_train, X_test, y_train, y_test = train_test_split(images, labels, test_size=0.2, random_state=42)
pd.DataFrame({'File Name':X_train,'Label':y_train}).to_csv('./train.csv',index=0)
pd.DataFrame({'File Name':X_test,'Label':y_test}).to_csv('./test.csv',index=0)
print(len(X_train))
print(len(X_test))
https://autokeras.com/start/中也提供了为某组织形式图片生成对应csv文件的代码。
训练模型
数据组织读取完成,就该寻找模型了,并保存。
from autokeras.image.image_supervised import load_image_dataset, ImageClassifier
from keras.models import load_model
from keras.utils import plot_model
from autokeras.utils import pickle_from_file
from keras.preprocessing.image import load_img, img_to_array
import numpy as np
import time
#读取数据
print('load_train_data')
begin = time.time()
x_train, y_train = load_image_dataset(csv_file_path="./train.csv",
images_path="./images")
print(x_train.shape)
print(y_train.shape)
print('load_test_data')
x_test, y_test = load_image_dataset(csv_file_path="./test.csv",
images_path="./images")
print(x_test.shape)
print(y_test.shape)
print('ues_time='+str(time.time()-begin))
MODEL_DIR = './my_model.h5'
MODEL_PNG = './model.png'
# 数据进行格式转换
train_data = train_data.astype('float32') / 255
test_data = test_data.astype('float32') / 255
print("train data shape:", train_data.shape)
# 使用图片识别器,保存在路径"./automodels/"中。
clf = ImageClassifier(path="./automodels/",verbose=True, augment=False)
# 给其训练数据和标签,训练的最长时间可以设定,假设为1分钟,autokers会不断找寻最优的网络模型
clf.fit(train_data, train_labels, time_limit=10*60* 60)
# 找到最优模型后,再最后进行一次训练和验证
clf.final_fit(train_data, train_labels, test_data, test_labels, retrain=True)
# 给出评估结果
y = clf.evaluate(test_data, test_labels)
print("evaluate:", y)
# 导出我们生成的模型
clf.export_autokeras_model(MODEL_DIR)
# 加载模型
model = pickle_from_file(MODEL_DIR)
可视化visualize.py
可视化之前需要安装一些东西
pip install pydot
pip install pydotplus
apt install graphviz
import os
from graphviz import Digraph
from autokeras.utils import pickle_from_file
def to_pdf(graph, path):
dot = Digraph(comment='The Round Table')
for index, node in enumerate(graph.node_list):
dot.node(str(index), str(node.shape))
for u in range(graph.n_nodes):
for v, layer_id in graph.adj_list[u]:
dot.edge(str(u), str(v), str(graph.layer_list[layer_id]))
dot.render(path)
def visualize(path):
cnn_module = pickle_from_file(os.path.join(path, 'module'))
cnn_module.searcher.path = path
for item in cnn_module.searcher.history:
model_id = item['model_id']
graph = cnn_module.searcher.load_model_by_id(model_id)
to_pdf(graph, os.path.join(path, str(model_id)))
if __name__ == '__main__':
visualize('./automodels/')
网友评论