iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 30
2
AI & Data

輕鬆掌握 Keras 及相關應用系列 第 30

Day 30:取代資料科學家 -- AutoKeras 入門

前言

AutoML 想要滿足普羅大眾的夢想,不用學習一堆的演算法,只要你指定工作類別,它就幫你找到最佳模型及最佳參數,當然包括預測結果,哇,這麼神,不一探究竟怎麼可以。

AutoKeras 就是以 Keras 風格撰寫的 AutoML 套件,目前提供三類功能:

  1. 影像分類與迴歸(Image Classification and Regression)
  2. 文字分類與迴歸(Text Classification and Regression)
  3. 結構化資料分類與迴歸(Structured Data Classification and Regression):即一般的表格資料,如 CSV、Excel、資料庫...等二維表格資料。

近期還會擴充 Time Series Forcasting, Object Detection, Image Segmentation 相關功能。

AutoKeras 撰寫非常簡單,我們就來玩玩看吧。

讓我們開始吧

  1. 安裝很簡單,執行下列指令即可:
pip install git+https://github.com/keras-team/keras-tuner.git@1.0.2rc2
pip install autokeras
  1. 簡單測試【手寫阿拉伯數字】辨識。
  • 複製第三篇範例 03_01_MNIST.ipynb,另存為 30_01_AutoKeras_MNIST.ipynb。
  • 載入MNIST資料集後,特徵縮放、One-hot encoding、指定損失函數、優化器、效能衡量指標通通都不需要,直接訓練即可,程式碼如下:
import tensorflow as tf
mnist = tf.keras.datasets.mnist

# 匯入 MNIST 手寫阿拉伯數字 訓練資料
(x_train, y_train),(x_test, y_test) = mnist.load_data()

import autokeras as ak

# 初始化影像分類器(image classifier)
clf = ak.ImageClassifier(
    overwrite=True,
    max_trials=1)
# 訓練模型
clf.fit(x_train, y_train, epochs=10)

執行後,會出現採用的最佳參數如下:
https://ithelp.ithome.com.tw/upload/images/20200930/20001976vPSqBmSr0U.png

它會進行很多次實驗(Trials),所以要稍等一下,訓練結果如下,準確度接近99%,比我們自己建立模型稍高:
https://ithelp.ithome.com.tw/upload/images/20200930/20001976TUfDYq7f7F.png

  • 評估:準確度也很高,連很潦草的第9筆也辨識正確。
# 預測
predicted_y = model.predict(x_test)

# 評估,打分數
print(model.evaluate(x_test, y_test))

https://ithelp.ithome.com.tw/upload/images/20200930/20001976Q6nDTly79e.png
圖一. 很潦草的第9筆,正確答案為 5

  • 使用自己寫的數字測試一下,哇,全對。
# 使用小畫家,寫0~9,實際測試看看
from skimage import io
from skimage.transform import resize
import numpy as np

X_ALL = np.empty((0, 28, 28))
for i in range(10): 
    image1 = io.imread(f'./myDigits/{i}.png', as_gray=True)
    #image1 = Image.open(uploaded_file).convert('LA')
    image_resized = resize(image1, (28, 28), anti_aliasing=True)    
    X1 = image_resized.reshape(1, 28, 28) #/ 255
    # 反轉顏色
    # 顏色0為白色,與RGB顏色不同,(0,0,0) 為黑色。
    # 還原特徵縮放
    X1 = (np.abs(1-X1) * 255).astype(int)
    X_ALL = np.concatenate([X_ALL, X1])
predictions = model.predict(X_ALL)
print(predictions)

https://ithelp.ithome.com.tw/upload/images/20200930/20001976KauHuLWGrj.png
圖二. 用小畫家寫的數字 0~9

Fashion MNIST 辨識

再測試女士10種配件(Fashion MNIST),程式檔為 30_02_AutoKeras_Fashion_MNIST.ipynb,結果與自建的模型差不多,準確度接近91%,另外從網路上下載一些圖片如下,結果只有涼鞋辨識錯誤。
https://ithelp.ithome.com.tw/upload/images/20200930/20001976Sq3FAOGbhZ.png
圖三. 網路上下載的圖片

https://ithelp.ithome.com.tw/upload/images/20200930/200019769GJRtYA3h1.png
圖四. 測試結果

其他廠商的發展

不只 AutoKeras,其實其他雲端廠商也在戮力發展 AutoML,畢竟不是每個人都有大量的時間及數理能力學習AI,如果能夠降低學習的門檻,對AI發展絕對是正面的。

目前微軟的 ML.NET、Tensorflow 的 Estimators 都有類似的作法,未來精彩可期,不過,也不要過於期待,真正要作的好,關鍵還是在找到真正影響辨識的因子,還是需要領域專家(Domain Expert)的判斷以及資料科學家(Data Scientist)的實驗與驗證。

結論

以上只是針對 AutoKeras 作很簡單的測試,【官網】還有更多的範例有待努力閱讀,最後,借用AI廠商講的話作為結束。

AI只會取代不懂AI的員工,懂得運用AI的員工永遠不會被取代。

雖然是第二次完賽,還是有莫大的壓力,要好好療養一陣子了。

本篇範例包括 30_01_AutoKeras_MNIST.ipynb、30_02_AutoKeras_Fashion_MNIST.ipynb 以及 test_data 目錄,可自【這裡】下載。


上一篇
Day 29:深究強化學習
系列文
輕鬆掌握 Keras 及相關應用30

尚未有邦友留言

立即登入留言