[深度學習][Python]使用簡單的神經網路來訓練辨識fashion_mnist資料

閱讀時間約 8 分鐘

本文主要介紹神經網路訓練辨識的過程,利用fashion_mnist及簡單的神經網路來進行分類。

使用只有兩層的神經網路來訓練辨識fashion_mnist資料。

顯示上圖fashion_mnist 圖片及類別的程式範例

import tensorflow as tf
from tensorflow.keras.datasets import fashion_mnist
import matplotlib.pyplot as plt

# 類別名稱
class_names = ["T-shirt/top", "Trouser", "Pullover", "Dress", "Coat",
"Sandal", "Shirt", "Sneaker", "Bag", "Ankle boot"]

# 載入資料集
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

# 定義顯示圖片和標籤的函數
def plot_class_images(images, labels, class_names):
plt.figure(figsize=(10, 10))
for i in range(10):
ax = plt.subplot(5, 2, i + 1)
idx = labels.tolist().index(i)
plt.imshow(images[idx], cmap=plt.cm.gray)
plt.title(f"Class {i}: {class_names[i]}")
plt.axis("off")
plt.show()

# 印出每個類別的編號和對應的名稱
for i, class_name in enumerate(class_names):
print(f"Class {i}: {class_name}")

# 顯示每個類別的圖片
plot_class_images(train_images, train_labels, class_names)

建議用Colab或者是VSCode 在開啟 .ipynb 檔案去跑,可以分段的測試

程式範例

需安裝套件tensorflow scikit-learn

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Data 載入資料
from tensorflow.keras.datasets import fashion_mnist
# 內建的資料集 fashion_mnist
# 切割 訓練檔案 與測試檔案
(x_train_set, y_train_set), (x_test, y_test) = fashion_mnist.load_data()

# Split data 切割資料
from sklearn.model_selection import train_test_split
# 利用sklearn模組來切割資料 將原先訓練資料 在分割出 訓練資料 與驗證資料
x_train, x_valid, y_train, y_valid = train_test_split(x_train_set,
y_train_set,
random_state=1)

# Preprocessing 資料縮放 (0~1)
x_train = x_train / 255.0
x_valid =x_valid / 255.0
x_test = x_test / 255.0

# Build Model 建立模組
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense

model = Sequential([
#輸入層:將 28*28攤平成一維度
Flatten(input_shape=x_train.shape[1:]),
#輸出層:10類別,10個神經元
Dense (units=10, activation='softmax')
])

print(model.summary())

# Compile model.compile 方法用來配置模型的學習過程
model.compile(loss='sparse_categorical_crossentropy',
optimizer='sgd',
metrics= ['accuracy'])

# Train 分批訓練 預設每批32筆分一批次
train = model.fit(x_train, y_train,
epochs=20,
validation_data=(x_valid, y_valid))

#呈現訓練曲線
pd.DataFrame(train.history).plot()
plt.grid(True)
plt.show()

# Evaluate #顯示結果 誤差值與準確性
model.evaluate(x_test, y_test)

# Predict
y_proba = model.predict(x_test) #實際去算y
#實際上預測結果 會是 一個串列裡面包含對10種類別預測的機率值
#所以 要用​argmax挑出最大的數值
y_pred = np.argmax(y_proba, axis=1)
print(f'預測類別是: {y_pred[1]}')
plt.imshow(x_test[1], cmap=plt.cm.gray)

# Confusion matrix 利用混淆矩陣來看 驗證結果
from sklearn.metrics import confusion_matrix

print(confusion_matrix(y_test, y_pred))

呈現結果

模型介紹說明

raw-image

Train 分批訓練 預設每批32筆分一批次

raw-image

Predict

預測的類別是2,秀出檢測的圖片剛好也是類別2,還好沒漏氣

預測結果

預測結果

Confusion matrix 混淆矩陣

紅色斜線代表預測正確的,對照圖,預測標籤0但真實標籤是1的有3個,真實標籤2有誤判13個。

raw-image


分析混淆矩陣

由混淆矩陣可以快速發現,哪裡誤判比較多,讓我們看預測標籤6 誤判 真實標籤0,2,4特別多,往回看一下圖檔,也難怪外輪廓都長得很像,特徵太接近,圖檔又小才28*28,用的神經網路太簡單,難怪學得不好。


raw-image

用更多層一點的神經網路

model = Sequential([
#第一層:將 28*28攤平成一維度
Flatten(input_shape=x_train.shape[1:]), #x_train.shape[1:] 28,28
#第二層
Dense (units=300, activation='relu'), #
Dense (units=200, activation='relu'),
Dense (units=100, activation='relu'),
#輸出層:10類別,10個神經元
Dense (units=10, activation='softmax')
])

混淆矩陣結果

對照一下2層與5層結果,預測6,誤判0 次數從136降到108了,也與理論實際符合在一定情況下神經網路層越多預測結果越好

raw-image













52會員
112內容數
Python程式設計師,不是在學習就是在學習的路上
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
《深度學習力》讀書心得在現今少子化的時代,提升學習效率至關重要。卡爾·紐波特的書《DEEP WORK深度工作力》提供了有效的時間管理和學習策略,能夠幫助我們在競爭激烈的社會中脫穎而出。書中介紹的學習方法和策略,不僅適用於大學生,也可應用在日常生活中,幫助我們擁有良好的學習力,增進生活效率。
Thumbnail
avatar
珍妮老師
2024-05-23
深度學習中的self-attention機制本文介紹了self-attention在處理不固定大小輸入值時的應用,並討論瞭如何計算self-attention以及transformer中的multi-head self-attention。此外,文章還探討了在語音辨識和圖片處理中使用self-attention的方法,以及與CNN的比較。
Thumbnail
avatar
dab戴伯
2024-05-03
《深度學習力 》指定閱讀的閱讀建議、放棄的關鍵字是?這本書訪談了大學學生,並且歸納出幾點建議,書中也提到不必每條條都嚴格遵守,而是選擇一組吸引你的規則,並在大學生活中履行。 我自己在看這本書的時候,結合自己的大學經歷,選取幾點我比較有感觸的部分,分為以下幾點,後面則會提到一些關於書中內容反思
Thumbnail
avatar
小豆pika
2024-04-18
深度學習:家庭系統諮商的新視角透過麗鳳督導在心理諮商上的應用,能夠讓我們看待個案問題時有了全新的視角。學理論要浸泡到自動化思考,分析個案時需要考慮家庭結構、互動關係和人際界線等重要元素。此外,心理諮商師需用關係去理解表徵問題,並運用大量的探問與對話,從而從症狀到系統的探索。
Thumbnail
avatar
俞時不候,勇往直前
2024-03-15
深度學習的技術不是只是硬記硬背,而是要用對方法。學習,不分年紀,不分時候,我們隨時都在學習,但有良好的學習技能,像故事/小說書中,電影裡那些擁有超能力的人一樣,可以在自己想學的技能中,一眼就記住,過目不忘的技能,如果擁有或許也是一件不錯的事,但切換到現實,我們認真學習,雖然也能記住,但所要花費的時間成本...
Thumbnail
avatar
宇彗星
2023-11-04
深度學習常用框架深度學習是機器學習的一個分支,它使用多層神經網絡來模擬和解決複雜的問題。有許多不同的深度學習框架可供選擇,這些框架提供了用於訓練神經網絡的工具和函數。以下是一些常用的深度學習框架的簡介: TensorFlow: TensorFlow由Google開發,是最流行的深度學習框架之一。它具有靈活的計算
avatar
艾利斯
2023-09-25
深度學習之技術,讀後心得感想之如何思辨知識錯誤。如何與錯誤打交道,就是對於自身的錯誤的察覺,又或者是對於所學的知識正確性如何思辨。 大家好,今天我們來談談「第二層思考」。這是一個相當重要的概念,尤其在現代社會中,我們需要面對各種各樣的資訊和知識,但有時候這些資訊和知識並不是那麼正確。所以,我們必須學會用第二層思考去判斷和分析這些資訊和知識。 首先
Thumbnail
avatar
熱血瓜爺
2023-06-21
如何 0–1 來預測新酒品的市場趨勢? (深度學習 - Part 1 : EDA 與 Python 畫圖工具)「品酒」已經不再是有錢人的權利,在這個美酒當道的年代,我們要如何像 Somm 電影的品酒師,一口就能辨別出「口感」、「年份」、「產地」,甚至預測下一季爆款的酒呢? 情境: 這時候,機器學習與深度學習都是相當好的辦法,但我們要成為好的品酒工程師之前,我們必須學會理解「數據來源」、「產業知識」、「演算法
Thumbnail
avatar
Dodson
2022-09-19
深度學習與教育科技的請益 feat. 陳佩英教授 師範大學的 陳佩英 教授來訪均一! 讓我們有機會向教授請益有關個人化學習的前瞻發展可能性。 教授很親切給予我們許多建言與引導,聽完教授的回饋,有三個小心得: 真的覺得自己懂得不過廣泛,也不夠深啊! 2. 也很喜歡教授提醒我們要注意工具背後的教育理念。 a. 特別是對非認知能力的評量,不能用行為主義來
Thumbnail
avatar
樂尼
2022-09-17
深度學習的技術-記憶第一章 | 獲得很不錯的記憶力    一小時讀一本書交錯的讀,比一本書讀三小時來的有效率(但你的腦袋卻會告訴你這樣沒效率,並且前者閱讀方式會讓你感到痛苦)    重讀的技巧>在你看完書之後,每天都用15分鐘複習腦袋閱讀的內容,提高記憶力,並使其進入長期記憶區。 第二章 | 理解力最大化    
avatar
紅茶拇指
2021-07-04