iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 30
0

今天是鐵人賽的最後一天,我想說來聊聊 Transferring learning 以及 Model serving。今天也會有簡單的Colab實作 (Transfer learning & Flask)。首先,先聊聊 Transfer learning。Transfer learning 簡單來說就是站在巨人的肩膀上,也是未來的ㄧ個趨勢。畢竟,並非這麼多人有龐大的GPU設備或者有完整的Dataset可以training。

而 Transfer learning的重點就是,我們認為不同的任務可以使用像似模型,其中不同任務間的訓練資料不一定有直接相關。透過權重的移轉再加以學習,花的時間減少,且可能效果較好。(Ex: 圖像:分辨狗跟貓的模型用來分辨猩猩及長頸鹿 或者 語音:不同語言的翻譯 )。

而以人生來說也是相同的道理,我們在學習一些新的事物,可能會透過一些不相干的事情或者相關的事情來猜測並學習。

https://ithelp.ithome.com.tw/upload/images/20191015/20119971VbtYhXx7qU.png
source

針對有Label 的 training,有很多種方式可以train 。 最簡單就是 load weight 後直接 train,這樣的話其實就類似一個 initializatin 的方法。 而更複雜的一點,可以像是 freeze某幾層,只 train 其中幾層 (Ex: Speech: 只Copy最後幾層。Image: 只copy前幾層)。或者是加入一些 regularzation 的部分,讓 原本的model 跟 train 完的權重不要差太多。

像針對Unlabel的部分,就可以像是使用 Zero - shot learning 類似說output 特徵,最後在透過相似度等方式做 clustering或者說歸類等等。

接下來我們還是會用 tf 2.0來實作一個 load pre-trained,這邊我們就先不train。直接接一個 api 。因為當你Model做好後,其實都是要變成一個api 讓其他同事來 打你的 Model (Model serving)。

今天會使用比較簡單的串接方式 (Flask) 來串接Model 。Tensorflow 也有出 Serving Model的部分,有興趣的朋友可以參考看看(TF-serving),而 TF-serving很強大,有更好的Model seving的支援 Ex: 不同Model serving或者說Scalable等。

首先,當今天我們已經下載好,或者之前已經train好所保留的模型。我們可以先Load進來,以及Load weight。可以發現這個是一個非常簡單的Model

with open('pre_trained.json','r') as f:
  model_json = f.read()
  
model = tf.keras.models.model_from_json(model_json)
model.load_weights("pre_trained.h5")
model.summary()

https://ithelp.ithome.com.tw/upload/images/20191015/20119971Uk1MUNHGpE.png

接下來就是 Flask的部分,我們要用Python這個輕量及網站框架來做一個簡易的api

app=Flask(__name__)
@app.route('/api/ml/<string:img>',methods=['POST'])

def classify_img(img):
  upload = '/content/'
  image = imread(upload+img)
  classes = ['T-shirt/top','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']
  prediction = model.predict([image.reshape(-1,28*28)])
  
  return jsonify({'object_detect':classes[np.argmax(prediction[0])]})

threading.Thread(target=app.run, kwargs={'host':'0.0.0.0','port':5000}).start()  

這個api簡單來說就是打一張圖片進去,模型會幫你預測是哪一個類別的圖片,並最後會吐圖片的類別給你。

r = requests.post("http://172.28.0.2:5000/api/ml/<image_name>")
print(r.text)

接下來我們載入一下資料,並把三張 test的圖片存下來。

(x_train,y_train),(x_test,y_test) = tf.keras.datasets.fashion_mnist.load_data()
for i in range(3):
  imsave(name='/content/{}.png'.format(i),arr=x_test[i])

最後,就可以直接打api,並會feedback,圖片類別給你,並確認一下長相。

首先我們先print出圖來
https://ithelp.ithome.com.tw/upload/images/20191015/20119971WbL2eiivwo.png

接下來直接打api確認哪一類別 -> 可以看到 Ankle boot

https://ithelp.ithome.com.tw/upload/images/20191015/201199712UCNqIa8Vq.png

再來一張圖試試看

https://ithelp.ithome.com.tw/upload/images/20191015/20119971OanM4lQgud.png

接下來直接打api確認哪一類別 -> 可以看到 Pullover
https://ithelp.ithome.com.tw/upload/images/20191015/20119971hRu5Phsm8Y.png

小結:

結束了30 天的 TF 2.0 寫作及實作Colab,真的非常的精實,一度想說會撐不下去。感謝朋友們的鼓勵。明天會做最後的總結及心得分享。謝謝大家漫長收看!

一日一梗圖:

https://ithelp.ithome.com.tw/upload/images/20191015/20119971xLucjv0QOP.png
source

Reference:

TF_Model_Flask_colab

TF_Model_serving_colab


上一篇
[Day-29] 增強式學習 (DQN) - 股票操作
系列文
Towards Tensorflow 2.030

尚未有邦友留言

立即登入留言