美文网首页
AutoKeras使用教程

AutoKeras使用教程

作者: cshun | 来源:发表于2019-09-30 10:11 被阅读0次

    文档: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/')
    

    相关文章

      网友评论

          本文标题:AutoKeras使用教程

          本文链接:https://www.haomeiwen.com/subject/solnectx.html