[深度學習][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













avatar-img
128會員
213內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
本文主要應用deepface的正面(frontal)人臉檢測的預設模型,使用analyze 函數,用於分析一張人臉圖像的情感(emotion)。 在Colab上實現,若用其他平台需稍微修改程式碼。 Deepface Deepface是一個輕量級的Python人臉辨識和臉部屬性分析
Google Tesseract Config說明,程式範例實際修改示範 前言 Tesseract 的 config 檔案用於指定 OCR 引擎的設定和參數。這些參數可以影響文本識別的結果 本文將彙整常用參數調整,並呈現不同參數出現不同的辨識結果 官網Tesseract OCR參數說明連結
使用Google Tesseract應用,擷取圖像的OCR並將讀取到的字元標註在原圖上 光學字元辨識功能 (Optical character recognition,光學字符辨識) 可以將影像中特徵範圍內的文本轉換為數字形式的文本。使用前必須安装Google Tesseract並更新
python Streamlit連動github程式碼實現YoloV8網頁版偵測物件 先致敬,YoloV8原作Github程式碼 Streamlit網頁 實現YoloV8 偵測物件 套用模型為YoloV8(YOLOv8n)最小模型,因github上傳檔案最大上限為25mb 導入圖像(搜尋街景
本文主要應用deepface的正面(frontal)人臉檢測的預設模型,使用analyze 函數,用於分析一張人臉圖像的情感(emotion)。 在Colab上實現,若用其他平台需稍微修改程式碼。 Deepface Deepface是一個輕量級的Python人臉辨識和臉部屬性分析
Google Tesseract Config說明,程式範例實際修改示範 前言 Tesseract 的 config 檔案用於指定 OCR 引擎的設定和參數。這些參數可以影響文本識別的結果 本文將彙整常用參數調整,並呈現不同參數出現不同的辨識結果 官網Tesseract OCR參數說明連結
使用Google Tesseract應用,擷取圖像的OCR並將讀取到的字元標註在原圖上 光學字元辨識功能 (Optical character recognition,光學字符辨識) 可以將影像中特徵範圍內的文本轉換為數字形式的文本。使用前必須安装Google Tesseract並更新
python Streamlit連動github程式碼實現YoloV8網頁版偵測物件 先致敬,YoloV8原作Github程式碼 Streamlit網頁 實現YoloV8 偵測物件 套用模型為YoloV8(YOLOv8n)最小模型,因github上傳檔案最大上限為25mb 導入圖像(搜尋街景
你可能也想看
Google News 追蹤
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
本篇文章介紹如何使用PyTorch構建和訓練圖神經網絡(GNN),並使用Cora資料集進行節點分類任務。通過模型架構的逐步優化,包括引入批量標準化和獨立的消息傳遞層,調整Dropout和聚合函數,顯著提高了模型的分類準確率。實驗結果表明,經過優化的GNN模型在處理圖結構數據具有強大的性能和應用潛力。
Thumbnail
透過這篇文章,我們將瞭解如何使用PyTorch實作圖神經網絡中的訊息傳遞機制,從定義消息傳遞的類別到實作消息傳遞過程。我們也探討了各種不同的消息傳遞機制,並通過對單次和多次傳遞過程的結果,可以看到節點特徵如何逐步傳遞與更新。
Thumbnail
本篇文章專注於消息傳遞(message passing)在圖神經網絡(GNN)中的應用,並以簡單的例子解釋了消息傳遞的過程和機制。
Thumbnail
本文主要筆記使用pytorch建立graph的幾個概念與實作。在傳統的神經網路模型中,數據點之間往往是互相連接和影響的,使用GNN,我們不僅處理單獨的數據點或Xb,而是處理一個包含多個數據點和它們之間連結的特徵。GNN的優勢在於其能夠將這些連結關係納入模型中,將關係本身作為特徵進行學習。
Thumbnail
前言 讀了許多理論,是時候實際動手做做看了,以下是我的模型訓練初體驗,有點糟就是了XD。 正文 def conv(filters, kernel_size, strides=1): return Conv2D(filters, kernel_size,
Thumbnail
卷積神經網路(CNN)是一種專門用於影像相關應用的神經網路。本文介紹了CNN在影像辨識中的應用,包括圖片的組成、Receptive Field、Parameter Sharing、以及Pooling等技術。通過本文,讀者將瞭解CNN在影像辨識領域的優勢和運作原理。
瞭解如何透過Regression實作Classification,使用one-hot vector表示不同的類別,並透過乘上不同的Weight和加上不同的bias來得到三個數值形成向量。同時通過softmax的方式得到最終的y'值,並探討使用Cross-entropy來計算類別的loss。
大語言模型是一種特殊的神經網路,設計來理解,生成與回應人類的文本。 大語言模型是使用大量文本數據訓練的深度神經網路,其訓練使用的文本數據甚至包括了整個網路公開的文本。 大語言模型的「大」,體現於模型的參數個數以及其使用的訓練數據集。如此大的模型可以有百億甚至千億的參數。這些參數都是神經網
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
本篇文章介紹如何使用PyTorch構建和訓練圖神經網絡(GNN),並使用Cora資料集進行節點分類任務。通過模型架構的逐步優化,包括引入批量標準化和獨立的消息傳遞層,調整Dropout和聚合函數,顯著提高了模型的分類準確率。實驗結果表明,經過優化的GNN模型在處理圖結構數據具有強大的性能和應用潛力。
Thumbnail
透過這篇文章,我們將瞭解如何使用PyTorch實作圖神經網絡中的訊息傳遞機制,從定義消息傳遞的類別到實作消息傳遞過程。我們也探討了各種不同的消息傳遞機制,並通過對單次和多次傳遞過程的結果,可以看到節點特徵如何逐步傳遞與更新。
Thumbnail
本篇文章專注於消息傳遞(message passing)在圖神經網絡(GNN)中的應用,並以簡單的例子解釋了消息傳遞的過程和機制。
Thumbnail
本文主要筆記使用pytorch建立graph的幾個概念與實作。在傳統的神經網路模型中,數據點之間往往是互相連接和影響的,使用GNN,我們不僅處理單獨的數據點或Xb,而是處理一個包含多個數據點和它們之間連結的特徵。GNN的優勢在於其能夠將這些連結關係納入模型中,將關係本身作為特徵進行學習。
Thumbnail
前言 讀了許多理論,是時候實際動手做做看了,以下是我的模型訓練初體驗,有點糟就是了XD。 正文 def conv(filters, kernel_size, strides=1): return Conv2D(filters, kernel_size,
Thumbnail
卷積神經網路(CNN)是一種專門用於影像相關應用的神經網路。本文介紹了CNN在影像辨識中的應用,包括圖片的組成、Receptive Field、Parameter Sharing、以及Pooling等技術。通過本文,讀者將瞭解CNN在影像辨識領域的優勢和運作原理。
瞭解如何透過Regression實作Classification,使用one-hot vector表示不同的類別,並透過乘上不同的Weight和加上不同的bias來得到三個數值形成向量。同時通過softmax的方式得到最終的y'值,並探討使用Cross-entropy來計算類別的loss。
大語言模型是一種特殊的神經網路,設計來理解,生成與回應人類的文本。 大語言模型是使用大量文本數據訓練的深度神經網路,其訓練使用的文本數據甚至包括了整個網路公開的文本。 大語言模型的「大」,體現於模型的參數個數以及其使用的訓練數據集。如此大的模型可以有百億甚至千億的參數。這些參數都是神經網