iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
AI & Data

「AI之旅:Python、Keras、PyTorch」 - 深度學習與數據入門挑戰系列 第 8

【Day8】以DNN辨識mnist數據集 更多更多還要更多!!

  • 分享至 

  • xImage
  •  

前面我們使用了第一個模型,它是一個前饋神經網絡(Feedforward Neural Network,FNN)FNN是一種神經網絡架構,它以一種前向傳播的方式工作,沒有循環或回饋的結構。在FNN中,每一層的神經元只與下一層相連,信息只會在前向方向傳播。這種結構使得FNN在建模和理解上相對簡單,因此適合初學者入門。

然而大多數的應用中,通常會使用更複雜的神經網絡架構,而不僅僅是FNN,因此接下來我們將學習更廣泛使用的基礎模型結構,包括DNN(深度神經網絡)CNN(卷積神經網絡)RNN(循環神經網絡)等等,這些模型具有更強大的能力,可應用於各種不同的任務。我們將從DNN開始,為我們打開更多深度學習的大門

DNN (深度神經網絡)

DNN之所以被稱為深度,是因為它包含多個隱藏層,使得網絡結構非常深,這種深度結構使DNN能夠學習從輸入到輸出之間的複雜映射關係,並且能夠自動提取數據的特徵。

https://ithelp.ithome.com.tw/upload/images/20230923/201631843Q1IVXKprd.jpg

圖片來源:https://www.datacamp.com/tutorial/introduction-to-deep-neural-networks

它在各種任務中都有不錯的表現,如圖像識別、語音識別、自然語言處理、數據分析等,而DNN還有一個關鍵優勢是它的通用性,它可以用於各種不同的領域和問題,只需適當調整網絡結構和訓練過程即可,並且DNN還可以與其他神經網絡結構結合,以解決更複雜的問題。

會發現其實DNN與FNN有點像,但還是有區別的,如下
DNN(深度神經網路)具有多層深度結構,適用於複雜的深度學習任務,如圖像和語音識別。
FNN(前饋神經網路)是簡單的全連接網路,用於傳統機器學習問題。
兩者構造差異在層數和連接方式。

那麼下面一樣讓我們來做實際操作

基於DNN辨識mnist手寫數字

我們一樣以mnist手寫數字作為數據集

  • 首先引入函式庫
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.datasets import mnist
import matplotlib.pyplot as plt
  • 載入數據集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
  • 數據預處理
train_images = train_images.reshape((60000, 28 * 28))  # 展平成一維數組
test_images = test_images.reshape((10000, 28 * 28))
train_images = train_images.astype('float32') / 255  # 正規化像素值
test_images = test_images.astype('float32') / 255
  • 建立DNN模型
model = Sequential()
model.add(Dense(128, input_shape=(28 * 28,), activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))
  • 訓練模型
# 訓練模型
history = model.fit(train_images, train_labels, epochs=10, batch_size=64, validation_data=(test_images, test_labels))  # 使用 validation_data 同時驗證損失
# 建立 LOSS 圖表
#train loss
plt.plot(history.history['loss'])
#test loss
plt.plot(history.history['val_loss'])
#標題
plt.title('Model loss')
#y軸標籤
plt.ylabel('Loss')
#x軸標籤
plt.xlabel('Epoch')
#顯示折線的名稱
plt.legend(['Train', 'Test'], loc='upper left')
#顯示折線圖
plt.show()
# 評估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)

訓練結果與Loss圖

https://ithelp.ithome.com.tw/upload/images/20230923/20163184NtLFldU4wx.png

以上就是DNN的介紹與模型,明天則開始介紹CNN與實際建立一個CNN模型,希望今天的內容能夠幫上忙,明天見。


上一篇
【Day7】只看正確率不準? Loss值搭配與模型好壞~
下一篇
【Day9】CNN卷積神經網絡 :基本概念到模型建構與訓練
系列文
「AI之旅:Python、Keras、PyTorch」 - 深度學習與數據入門挑戰22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言