1. 程式人生 > >Keras之AutoKeras框架:AutoKeras框架的簡介、特點、安裝、使用方法詳細攻略

Keras之AutoKeras框架:AutoKeras框架的簡介、特點、安裝、使用方法詳細攻略

AutoKeras框架:AutoKeras框架的簡介、特點、使用方法詳細攻略

Paper:《Efficient Neural Architecture Search via Parameter Sharing》

AutoKeras框架的簡介

那什麼是 Keras

        AutoKeras是一個開源的,基於 Keras 的新型 AutoML 庫。AutoKeras 是一個用於自動化機器學習的開源軟體庫,提供自動搜尋深度學習模型的架構和超引數的功能。
(1)、Keras 是一個用 Python 編寫的高階神經網路 API,能夠在 TensorFlow、CNTK 或 Theano 之上執行。它的意義在於可以實現快速實驗。而能夠以最小的延遲把想法變成結果是順利進行研究的關鍵。

       AutoKeras比AutoML偉大的地方就是開源,哈哈,開源就等同於免費!這是我非常喜歡的一點!!!簡而言之,AutoML是給有錢的公司玩的,像我們這樣做學術研究的, AutoKeras簡直妙不可言!!

官方網站:https://autokeras.com/
專案github:https://github.com/jhfjhfj1/autokeras
TensorFlow版本:https://github.com/melodyguan/enas
PyTorch 版本:https://github.com/carpedm20/ENAS-pytorch

AutoKeras框架的特點

1、AutoKeras 基於非常易於使用的深度學習資料庫 Keras,使用 ENAS 的方法。ENAS 是 NAS 的最新版本,因此讓 AutoKeras 具有高效、安裝簡單、引數可調、易修改等特點。

 

 

 

AutoKeras的安裝

1、安裝AutoKeras

pip install autokeras


 

2、測試

import autokeras as ak

clf = ak.ImageClassifier()
clf.fit(x_train, y_train)
results = clf.predict(x_test)


#匯出模型
from autokeras import ImageClassifier
clf = ImageClassifier(verbose=True, augment=False)
clf.load_searcher().load_best_model().produce_keras_model().save('my_model.h5')


#視覺化模型
from keras.models import load_model
model = load_model('my_model.h5') #See 'How to export keras models?' to generate this file before loading it.
from keras.utils import plot_model
plot_model(model, to_file='my_model.png')

AutoKeras框架的使用方法

1、舉個栗子

from keras.datasets import mnist
from autokeras.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)

2、再舉一個栗子

# coding:utf-8
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import numpy as np
import matplotlib.pyplot as plt
from scipy.misc import imresize
import cv2
from autokeras.image_supervised import ImageClassifier
from sklearn.metrics import accuracy_score
from keras.models import load_model
from keras.utils import plot_model
import time


start = time.time()

def read_img(path,class_num):
    imgName_list = os.listdir(path)
    n = len(imgName_list)
    # img_index,img_colummns,img_rgbSize = plt.imread(path+'/'+imgName_list[0]).shape
    img_index, img_colummns = [28,38]  # 這個設定很重要。如果你的電腦很好的話可以忽略設定。要不然記憶體不足的。
    print(img_index,img_colummns)
    data = np.zeros([n,img_index,img_colummns,1])
    label = np.zeros([n,1])
    class_number = 0
    for i in range(n):
        imgPath = path+'/'+imgName_list[i]
        data[i,:,:,0] = imresize(cv2.cvtColor(plt.imread(imgPath),cv2.COLOR_BGR2GRAY),[img_index,img_colummns])
        if (i)%(class_num) == 0:
            class_number = class_number+1
        label[i,0] = class_number
    return data,label

x_train,y_train = read_img('./data/re/train',80)
x_test,y_test = read_img('./data/re/test',20)

animal = ['bus', 'dinosaur', 'flower', 'horse', 'elephant']  # 動物類別對應 labelValue 為 [1,2,3,4,5]
# plt.imshow(x_test[0,:,:,0],cmap='gray')
# plt.show()

if __name__=='__main__':
    # 模型構建
    model = ImageClassifier(verbose=True)
    # 搜尋網路模型
    model.fit(x_train,y_train,time_limit=1*60)
    # 驗證最優模型
    model.final_fit(x_train,y_train,x_test,y_test,retrain=True)
    # 給出評估結果
    score = model.evaluate(x_test,y_test)
    # 識別結果
    y_predict = model.predict(x_test)
    # 精確度
    accuracy = accuracy_score(y_test,y_predict)
    # 打印出score與accuracy
    print('score:',score,'  accuracy:',accuracy)

    model_dir = r'./modelStructure/imgModel.h5'
    model_img = r'./modelStructure/imgModel_ST.png'
    # 儲存視覺化模型
    # model.load_searcher().load_best_model().produce_keras_model().save(model_dir)
    # 載入模型
    # automodel = load_model(model_dir)
    # 輸出模型 structure 圖
    # plot_model(automodel, to_file=model_img)

    end = time.time()
    print(end-start)