---
# System prepended metadata

title: 2024-09-27 DL
tags: [DL, session, TensorFlow, Keras]

---

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