[深度學習][Python]多層感知器(MLP)模型使用不同激活函數(ReLU 和 Sigmoid)的效果

閱讀時間約 8 分鐘

本文將展示使用不同激活函數(ReLU 和 Sigmoid)的效果。

一個簡單的多層感知器(MLP)模型來對 Fashion-MNIST 資料集進行分類。

relu vs sigmoid

relu vs sigmoid

函數定義

Sigmoid 函數

Sigmoid 函數將輸入壓縮到 0到 1 之間:

特性:

  • 輸出範圍是 (0,1)(0, 1)(0,1)。
  • 當 xxx 趨向無窮大時,輸出趨向於 1;當 xxx 趨向負無窮大時,輸出趨向於 0。

ReLU 函數

ReLU 函數只保留正數,將負數輸出為 0:

特性:

  • 輸出範圍是 [0,∞]。
  • 將所有負輸入值壓縮為 0,正輸入值保持不變。

2. 梯度特性

Sigmoid 函數

  • Sigmoid 函數的梯度在輸入值非常大或非常小時會趨近於 0,這會導致梯度消失問題(Gradient Vanishing Problem)。
  • 當激活值接近 0 或 1 時,導數值變得非常小,從而導致梯度傳遞到前幾層時變得幾乎為零,訓練變得非常緩慢。

ReLU 函數

  • ReLU 的梯度在正值範圍內為 1,在負值範圍內為 0。
  • ReLU 避免了梯度消失問題,因為在正值範圍內梯度不會變小。
  • 但是,ReLU 存在「神經元死亡」問題,即如果一個神經元的輸出總是負值,它的梯度將永遠是 0,該神經元將不再更新。

3. 計算效率

Sigmoid 函數

  • 計算 Sigmoid 涉及到指數運算,這在計算上相對比較昂貴。

ReLU 函數

  • ReLU 只需簡單的比較和取最大值運算,計算效率非常高。

4. 適用場景

Sigmoid 函數

  • 常用於輸出層,特別是在二元分類問題中。

ReLU 函數

  • 常用於隱藏層,在大多數現代神經網絡架構中是首選激活函數。

程式範例

import tensorflow as tf
from tensorflow.keras.datasets import fashion_mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
import matplotlib.pyplot as plt

# 載入 Fashion-MNIST 資料集
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()

# 標準化影像數據到 [0, 1] 範圍
x_train = x_train / 255.0
x_test = x_test / 255.0

# 定義模型架構
def create_model(activation):
model = Sequential([
Flatten(input_shape=(28, 28)),
Dense(128, activation=activation),
Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
return model

# 創建兩個模型,一個使用 ReLU,另一個使用 Sigmoid
model_relu = create_model('relu')
model_sigmoid = create_model('sigmoid')

# 訓練模型
history_relu = model_relu.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test), verbose=2)
history_sigmoid = model_sigmoid.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test), verbose=2)

# 評估模型
test_loss_relu, test_acc_relu = model_relu.evaluate(x_test, y_test, verbose=2)
test_loss_sigmoid, test_acc_sigmoid = model_sigmoid.evaluate(x_test, y_test, verbose=2)

print(f"ReLU Model Test Accuracy: {test_acc_relu}")
print(f"Sigmoid Model Test Accuracy: {test_acc_sigmoid}")

# 繪製訓練過程中的準確度和損失
plt.figure(figsize=(12, 5))

plt.subplot(1, 2, 1)
plt.plot(history_relu.history['accuracy'], label='ReLU Train Accuracy')
plt.plot(history_relu.history['val_accuracy'], label='ReLU Val Accuracy')
plt.plot(history_sigmoid.history['accuracy'], label='Sigmoid Train Accuracy')
plt.plot(history_sigmoid.history['val_accuracy'], label='Sigmoid Val Accuracy')
plt.title('Model Accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend()

plt.subplot(1, 2, 2)
plt.plot(history_relu.history['loss'], label='ReLU Train Loss')
plt.plot(history_relu.history['val_loss'], label='ReLU Val Loss')
plt.plot(history_sigmoid.history['loss'], label='Sigmoid Train Loss')
plt.plot(history_sigmoid.history['val_loss'], label='Sigmoid Val Loss')
plt.title('Model Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()

plt.tight_layout()
plt.show()

繪製訓練過程

繪製訓練過程中的準確度和損失

繪製訓練過程中的準確度和損失

準確率高

raw-image


結果與比較

  • ReLU(Rectified Linear Unit):通常在深度學習中效果更好,因為它在正值範圍內有較好的梯度傳遞效果,能夠減少梯度消失問題。
  • Sigmoid:在多層神經網絡中可能會遇到梯度消失問題,使得訓練變慢且難以收斂。

透過這個程式範例,你可以觀察到使用不同激活函數的模型在準確度ReLU 0.875Sigmoid 0.872好一點,由繪製訓練過程上來看ReLU收斂速度比Sigmoid來的快收斂。通常來說,ReLU 會比 Sigmoid 表現更好一點。




119會員
201內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
本文主要介紹神經網路訓練辨識的過程,利用fashion_mnist及簡單的神經網路來進行分類。 使用只有兩層的神經網路來訓練辨識fashion_mnist資料。
本文主要應用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 導入圖像(搜尋街景
本文主要介紹神經網路訓練辨識的過程,利用fashion_mnist及簡單的神經網路來進行分類。 使用只有兩層的神經網路來訓練辨識fashion_mnist資料。
本文主要應用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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
在現今少子化的時代,提升學習效率至關重要。卡爾·紐波特的書《DEEP WORK深度工作力》提供了有效的時間管理和學習策略,能夠幫助我們在競爭激烈的社會中脫穎而出。書中介紹的學習方法和策略,不僅適用於大學生,也可應用在日常生活中,幫助我們擁有良好的學習力,增進生活效率。
Thumbnail
本文介紹了self-attention在處理不固定大小輸入值時的應用,並討論瞭如何計算self-attention以及transformer中的multi-head self-attention。此外,文章還探討了在語音辨識和圖片處理中使用self-attention的方法,以及與CNN的比較。
Thumbnail
這本書訪談了大學學生,並且歸納出幾點建議,書中也提到不必每條條都嚴格遵守,而是選擇一組吸引你的規則,並在大學生活中履行。 我自己在看這本書的時候,結合自己的大學經歷,選取幾點我比較有感觸的部分,分為以下幾點,後面則會提到一些關於書中內容反思
Thumbnail
透過麗鳳督導在心理諮商上的應用,能夠讓我們看待個案問題時有了全新的視角。學理論要浸泡到自動化思考,分析個案時需要考慮家庭結構、互動關係和人際界線等重要元素。此外,心理諮商師需用關係去理解表徵問題,並運用大量的探問與對話,從而從症狀到系統的探索。
Thumbnail
不是只是硬記硬背,而是要用對方法。學習,不分年紀,不分時候,我們隨時都在學習,但有良好的學習技能,像故事/小說書中,電影裡那些擁有超能力的人一樣,可以在自己想學的技能中,一眼就記住,過目不忘的技能,如果擁有或許也是一件不錯的事,但切換到現實,我們認真學習,雖然也能記住,但所要花費的時間成本...
深度學習是機器學習的一個分支,它使用多層神經網絡來模擬和解決複雜的問題。有許多不同的深度學習框架可供選擇,這些框架提供了用於訓練神經網絡的工具和函數。以下是一些常用的深度學習框架的簡介: TensorFlow: TensorFlow由Google開發,是最流行的深度學習框架之一。它具有靈活的計算
Thumbnail
如何與錯誤打交道,就是對於自身的錯誤的察覺,又或者是對於所學的知識正確性如何思辨。 大家好,今天我們來談談「第二層思考」。這是一個相當重要的概念,尤其在現代社會中,我們需要面對各種各樣的資訊和知識,但有時候這些資訊和知識並不是那麼正確。所以,我們必須學會用第二層思考去判斷和分析這些資訊和知識。 首先
Thumbnail
「品酒」已經不再是有錢人的權利,在這個美酒當道的年代,我們要如何像 Somm 電影的品酒師,一口就能辨別出「口感」、「年份」、「產地」,甚至預測下一季爆款的酒呢? 情境: 這時候,機器學習與深度學習都是相當好的辦法,但我們要成為好的品酒工程師之前,我們必須學會理解「數據來源」、「產業知識」、「演算法
Thumbnail
師範大學的 陳佩英 教授來訪均一! 讓我們有機會向教授請益有關個人化學習的前瞻發展可能性。 教授很親切給予我們許多建言與引導,聽完教授的回饋,有三個小心得: 真的覺得自己懂得不過廣泛,也不夠深啊! 2. 也很喜歡教授提醒我們要注意工具背後的教育理念。 a. 特別是對非認知能力的評量,不能用行為主義來
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
在現今少子化的時代,提升學習效率至關重要。卡爾·紐波特的書《DEEP WORK深度工作力》提供了有效的時間管理和學習策略,能夠幫助我們在競爭激烈的社會中脫穎而出。書中介紹的學習方法和策略,不僅適用於大學生,也可應用在日常生活中,幫助我們擁有良好的學習力,增進生活效率。
Thumbnail
本文介紹了self-attention在處理不固定大小輸入值時的應用,並討論瞭如何計算self-attention以及transformer中的multi-head self-attention。此外,文章還探討了在語音辨識和圖片處理中使用self-attention的方法,以及與CNN的比較。
Thumbnail
這本書訪談了大學學生,並且歸納出幾點建議,書中也提到不必每條條都嚴格遵守,而是選擇一組吸引你的規則,並在大學生活中履行。 我自己在看這本書的時候,結合自己的大學經歷,選取幾點我比較有感觸的部分,分為以下幾點,後面則會提到一些關於書中內容反思
Thumbnail
透過麗鳳督導在心理諮商上的應用,能夠讓我們看待個案問題時有了全新的視角。學理論要浸泡到自動化思考,分析個案時需要考慮家庭結構、互動關係和人際界線等重要元素。此外,心理諮商師需用關係去理解表徵問題,並運用大量的探問與對話,從而從症狀到系統的探索。
Thumbnail
不是只是硬記硬背,而是要用對方法。學習,不分年紀,不分時候,我們隨時都在學習,但有良好的學習技能,像故事/小說書中,電影裡那些擁有超能力的人一樣,可以在自己想學的技能中,一眼就記住,過目不忘的技能,如果擁有或許也是一件不錯的事,但切換到現實,我們認真學習,雖然也能記住,但所要花費的時間成本...
深度學習是機器學習的一個分支,它使用多層神經網絡來模擬和解決複雜的問題。有許多不同的深度學習框架可供選擇,這些框架提供了用於訓練神經網絡的工具和函數。以下是一些常用的深度學習框架的簡介: TensorFlow: TensorFlow由Google開發,是最流行的深度學習框架之一。它具有靈活的計算
Thumbnail
如何與錯誤打交道,就是對於自身的錯誤的察覺,又或者是對於所學的知識正確性如何思辨。 大家好,今天我們來談談「第二層思考」。這是一個相當重要的概念,尤其在現代社會中,我們需要面對各種各樣的資訊和知識,但有時候這些資訊和知識並不是那麼正確。所以,我們必須學會用第二層思考去判斷和分析這些資訊和知識。 首先
Thumbnail
「品酒」已經不再是有錢人的權利,在這個美酒當道的年代,我們要如何像 Somm 電影的品酒師,一口就能辨別出「口感」、「年份」、「產地」,甚至預測下一季爆款的酒呢? 情境: 這時候,機器學習與深度學習都是相當好的辦法,但我們要成為好的品酒工程師之前,我們必須學會理解「數據來源」、「產業知識」、「演算法
Thumbnail
師範大學的 陳佩英 教授來訪均一! 讓我們有機會向教授請益有關個人化學習的前瞻發展可能性。 教授很親切給予我們許多建言與引導,聽完教授的回饋,有三個小心得: 真的覺得自己懂得不過廣泛,也不夠深啊! 2. 也很喜歡教授提醒我們要注意工具背後的教育理念。 a. 特別是對非認知能力的評量,不能用行為主義來