# 2024-09-27 DL - 主題:**TensorFlow Keras 練習——MNIST、Boston House Price** - 影片: - 資料: - [**DL Lecture 01 (How to construct an NN - Part)**](https://drive.google.com/file/d/1ugcciON1F1hrOS72I_7BOiqn_6VIxsGe/view?usp=drive_link) pp.40–86 (結束) - 分工 - 主持人: - 教學組 - 領讀人: @Princendwang - 編譯組: @sin-iu-ho - 紀錄組 - 文字組: @sin-iu-ho - 影音組: @as854398 > [!Note] > 本次讀書會開始,不再播放張敏寬老師的上課影片。 >[!Warning] >> 本次錄影已在班級YT發布,連結如下:https://www.youtube.com/watch?v=7Q6d7ghV9-E > 請同學勿將影片網址提供給非本讀書會成員,因影片含有講師講義,僅限於本次讀書會教學使用,避免誤觸著作權法因而影響其他同學原有的權利,再請各位配合謝謝。 --- ## 目錄 [TOC] --- ## 1. 【練習一】MNIST 手寫數字資料集 - [MNIST](https://hackmd.io/@learnai2024/mldl-encyclopedia#MNIST) - 總共 70,000 筆 - 訓練集:60,000 筆 - 測試集:10,000 筆 - 多元分類問題 - 使用一個 Dense 層作為中間層 ### 1.1 載入資料集 直接從 `tf.keras.datasets` 模組載入資料集 ```python= from tf.keras.datasets import mnist (X_train, y_train), (X_test, y_test) = mnist.load_data() ``` :::info 注意 tuple unpacking 的方式,如果有不需要的資料,可以用 `_` 來代替。 ```python= (X_train, y_train), (_, _) = mnist.load_data() ``` ::: ### 1.2 資料預處理 #### 畫出圖片 ```python= import matplotlib.pyplot as plt plt.gcf().set_size_inches(15,4) # 設定 Figure 長、寬 for i in range(5): axe = plt.subplot(1,5,1+i) axe.imshow(X_train) ``` :::info gcf() 是 Get_Current_Figure 的縮寫 ::: #### 輸入資料的維度轉擙 輸入資料為 28*28 的二維灰階影像陣列,用 reshape 指令將其轉為一維陣列 ```python= x_train_reshaped=x_train.reshape((60000,28*28)) ``` :::warning 敏寬老師的慣例: - `train_X`、`train_y` 代表原始資料, - `X_train`、`y_train` 代表處理後的資料。 我們的慣例: - `X_train`、`y_train` 代表原始資料, - `X_train_p`、`y_train_p` 代表處理後的資料, - 或用 `X_train_reshaped`、`y_train_scaled` 代表各種不同處理後的資料。 ::: #### 標籤轉換 使用 [`to_catergorical`](https://www.tensorflow.org/api_docs/python/tf/keras/utils/to_categorical) 做 one-hot encoding ```python= from tensorflow.keras.utils import to_categorical y_train_cat=to_categorical(y_train) y_test_cat=to_categorical(y_test) ``` ### 1.3 神經網路 #### 繪製神經網路模型 ```python= from tensorflow.keras.utils import plot_model plot_model(model, to_file='my_model.png', dpi=200) ``` 不再需要(講義 p.58 的)`graphviz`、`pydot`、`pydotplus` 等額外套件。 #### 編譯(compilation) ```python= model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy']) ``` - 損失函數:[多元交叉熵](https://hackmd.io/@learnai2024/mldl-encyclopedia#Multiclass-cross-entropy)(Categorical cross-entropy) - 評估指標:[準確率](#Categorical_crossentropy)(accuracy) #### 訓練(training) ```python= model.fit(X_train_p, y_train_p, ) ``` ### 評估(evaluation) ```python= test_loss,test_accuracy = model.evaluate(x_test_reshaped,y_test_cat) ``` ### 預測(prediction) ```python= predict_outpute = model.predict(x_test_reshaped) ``` 講義 p.64 的 `predict_classes()` 已經棄用。 #### 畫出預測結果 ## 其他事項 - Google Colab 協作效果差,下次改用 VS Code Live Share - 下次範圍:第二份講義 ~p.66 ## 補充資料 - matplotlib - [練習連結](https://colab.research.google.com/drive/1lg2wcewebUbhEsUWiSWuVIvUwqaM-Kls)