# 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)