--- tags: ML --- 機器學習 入門(X 認識(O 02 === ### 補充 之前講的只有佔一小部分 還有很多演算法是很強大的 然後我發現上一篇的'weight'好像都拼錯,GG # 複習 ### training data ### model ### loss ### feature ### label # NN ## deep learning ![](https://miro.medium.com/max/1866/0*AONVmd3v4wO_dWr6) 模組化輸出 ## node 一個 node 由上一層的輸出作為輸入,然後經由activation function輸出 ![](https://4.bp.blogspot.com/-qftQdQVW2sM/WLGmmJMGtgI/AAAAAAABPJY/9mpZ_Z_uj-UfsWaPfeBw3PNDnDIXt4q7gCLcB/s1600/600px-ArtificialNeuronModel_english.png) ![](https://i.imgur.com/cIpbbVg.png) ## activation 想想如果沒有activation 就變成全部相加了,最後的結果會跟一個neural一樣 >hint:線性 簡而言之,Activation Function,就是把計算好了的輸入值standardize 好,規範它的「輸出數值之範圍」,「輸出數值的相互關係」。 ![](https://i.imgur.com/T9RfUJE.png) ### ReLU 如何 fit 出 function? 請看白板-> ## back propagation 你可能會想問,這樣是怎麼更新weight 詳細原理我們不解釋,不過你可以想成在最後一層把前面輸入當常數輸入,然後原理就跟之前教的一樣,最後在依據chain rule算前面那層的,依此類推 # classification 概念跟之前差不多 step 0 蒐集資料 step 1 設定model step 2 設定loss step 3 更新wight(training) step 4 評估(testing) ## model NN >注意:輸入層必須與x的shape相同(node數和輸入的數字量相同) >而輸出層也必須注意與lable的shape相同 當然還有別的可以用,不過我們這邊先用NN ## loss 在這種輸出一種分類的狀況我們常用 cross entropy loss ## cross entropy loss ![](https://miro.medium.com/max/1122/1*KY8QcvVOz1sdUnVKKhxWyA@2x.png) 白板-> # keras https://keras.io/zh/ keras有點像tensorflow的整合介面,先把他當一個機器學習的模組就好 >注意:輸入值的格式必須要是numpy的array,不能直接用python的list ## 實戰 step 0:import 模組 ```python= import numbers as np import tensorflow as tf import matplotlib.pyplot as plt import keras as kr from keras.utils import np_utils, plot_model from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D #需要的模組,不過有些沒用到,有可能下節課才會用 ``` step 1:載入訓練與測試資料 ```python= def load_data():# (x_train, y_train), (x_test, y_test) = kr.datasets.mnist.load_data() y_train = np_utils.to_categorical(y_train) y_test = np_utils.to_categorical(y_test) print('feature shape:',x_test.shape,'lable shape:',y_test.shape) return (x_train, y_train), (x_test, y_test) (x_train, y_train), (x_test, y_test) =load_data() ``` step 2:輸入層 ```python= model=kr.models.Sequential() model.add(kr.layers.Reshape((784,),input_shape=(28,28)))#28*28 to 784 ``` step 3:隱藏層 ```python= # vvvvv=hidden=vvvvvv model.add(kr.layers.Dense(30,activation="relu")) model.add(kr.layers.Dense(30,activation="relu")) # ^^^^^hidden^^^^^^ ``` >Dense:全連接 step 4:輸出層 ```python= model.add(kr.layers.Dense(10,activation="softmax")) model.compile(optimizer="adam", loss="categorical_crossentropy",metrics=['accuracy']) ``` >softmax:輸出各自的機率,總和為1 >optimizer:先隨便選一個,想認真挑的話我google到[這篇](https://kknews.cc/zh-tw/tech/5ajljgl.html) step 5:開始訓練 ```python= print('START!') history=model.fit(x_train,y_train,batch_size=512,epochs=5) ``` >batch_size:更新一次weight所使用的樣本數 >epochs:所有batch被用來訓練的次數 step 6:印出你model的形狀與testing的結果 ```python= model.summary() print(history.history) los=model.evaluate(x_test,y_test) ``` step 7:have fun ```python= from google.colab.patches import cv2_imshow for i in range(5): cv2_imshow(x_test[i]) print(model.predict_classes(x_test)[i]) ``` # 本日目標 請讓testing set 的正確率越高越好 **加油!** ps:禁止在訓練時加入testing set # 問題思考 試著上傳一張28*28的數字圖片讓機器辨識 以下程式碼為將圖片轉換為 符合格式的輸入 ```python= from google.colab import files #匯入套件 import cv2 def get_img(file_name): img=cv2.imread(file_name,cv2.IMREAD_GRAYSCALE) dst = 255-img cv2_imshow(dst) cv2.waitKey(0) return (dst.reshape(1,1,28,28)) ``` 更換圖片就重複執行下面這塊 ```python= upload = files.upload() #開啟上傳介面並載入 aimg=get_img('上船的檔名.png') print(type(aimg)) print(aimg.shape) k=model.predict(aimg) print(k) k2=model.predict_classes(aimg) print(k2) ``` 準不準?如果不准,可能的原因為何? ps:其實我也不確定 # 參考 提醒我記得擦白板 還有拍照 https://mropengate.blogspot.com/2017/02/deep-learning-role-of-activation.html https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8-%E6%B7%B1%E5%BA%A6%E5%AD%B8%E7%BF%92-%E5%9F%BA%E7%A4%8E%E4%BB%8B%E7%B4%B9-%E6%90%8D%E5%A4%B1%E5%87%BD%E6%95%B8-loss-function-2dcac5ebb6cb