iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
自我挑戰組

30天初探tensorflow之旅系列 第 25

Day 25 循環神經網路(RNN)處理 MNIST

  • 分享至 

  • xImage
  •  

前言
今天想做一個測試,就是用循環神經網路(RNN)處理 MNIST數據集,通常 MNIST 是用卷積神經網路處理,RNN 更適合處理序列數據,但也可以將圖像視為一系列行或列來應用它。

基本介紹
循環神經網路(Recurrent Neural Network,簡稱 RNN)是一種專門用於處理序列數據的神經網路架構,和傳統的前饋神經網路不同,RNN 在結構中引入了循環連接,就可以保留先前時間步的信息,所以適合處理時間序列或其他順序數據,像是文本、語音和音樂等。

主要特點
1.序列處理:
RNN 可以逐步處理序列中的每個元素,並在每一步中保留隱藏狀態以捕捉前面元素的信息。
2.共享參數:
所有時間步用相同的權重和偏置,讓模型在處理不同時間步時有相同的參數,這樣可以有效減少模型的複雜度。
3.隱藏狀態:
RNN 擁有一個隱藏狀態,它在每一步中更新並保留序列信息,這可以讓模型對過去的信息進行建模。

變體
變體是對某種基本模型或算法的不同版本或改進,這些變體目的是解決特定問題或提高模型性能。
而這便以 RNN 的變體為例介紹以下兩種:
1.長短期記憶網絡(LSTM):
LSTM 是一種特殊的 RNN,設計用於解決長期依賴問題,它通過引入遺忘門、輸入門和輸出門來控制信息的流入和流出,而能更有效地記住重要信息。
2.門控循環單元(GRU):
GRU 是 LSTM 的一個簡化版本,具有相似的性能,但參數更少,計算量更小,它合併了 LSTM 的一些門,提供了更高效的計算。

使用 RNN 處理 MNIST
以下是利用 RNN 處理 MNIST 的範例程式碼:
前面步驟其實差不多,但因為我要讓它示範出輸出結果所以還是都再打一次。
先加載和預處理數據:

import numpy as np
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0

重新排列數據來適應 RNN ,括號內分別是樣本數、時間步和特徵數,將每個圖像的每一行視為一個時間步。

x_train = x_train.reshape((x_train.shape[0], 28, 28))
x_test = x_test.reshape((x_test.shape[0], 28, 28))

定義 RNN 模型,編譯並訓練:

model = models.Sequential()
model.add(layers.SimpleRNN(128, activation='relu', input_shape=(28, 28)))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10, batch_size=128, validation_split=0.2)

最後評估模型,測試它的準確率:

test_loss, test_accuracy = model.evaluate(x_test, y_test)
print(f'test: {test_accuracy:.4f}')

輸出結果為如圖,
https://ithelp.ithome.com.tw/upload/images/20241009/20169330yMZOGwGSEB.png

特別注意:

  • 通過將 MNIST 圖像視為行的序列,可以利用 RNN 的序列特性,每個圖像表示為 28 個時間步(行),每個時間步有 28 個特徵(列)。

上一篇
Day 24 AutoEncoder介紹
下一篇
Day 26 關於長短期記憶網路(LSTM)
系列文
30天初探tensorflow之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言