最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Pytorch實現(xiàn)Swish激活函數(shù)的示例詳解

 更新時間:2023年11月21日 11:41:42   作者:鯨落_  
激活函數(shù)是人工神經(jīng)網(wǎng)絡(luò)的基本組成部分,他們將非線性引入模型,使其能夠?qū)W習數(shù)據(jù)中的復雜關(guān)系,Swish 激活函數(shù)就是此類激活函數(shù)之一,在本文中,我們將深入研究 Swish 激活函數(shù),提供數(shù)學公式,探索其相對于 ReLU 的優(yōu)勢,并使用 PyTorch 演示其實現(xiàn)

前言

激活函數(shù)是人工神經(jīng)網(wǎng)絡(luò)的基本組成部分。他們將非線性引入模型,使其能夠?qū)W習數(shù)據(jù)中的復雜關(guān)系。Swish 激活函數(shù)就是此類激活函數(shù)之一,因其獨特的屬性和相對于廣泛使用的整流線性單元 (ReLU) 激活的潛在優(yōu)勢而受到關(guān)注。在本文中,我們將深入研究 Swish 激活函數(shù),提供數(shù)學公式,探索其相對于 ReLU 的優(yōu)勢,并使用 PyTorch 演示其實現(xiàn)。

Swish 激活功能

Swish 激活函數(shù)由 Google 研究人員于 2017 年推出,其數(shù)學定義如下:

Swish(x) = x * sigmoid(x)

Where:

  • x:激活函數(shù)的輸入值。
  • sigmoid(x):sigmoid 函數(shù),將任何實數(shù)值映射到范圍 [0, 1]。隨著 x 的增加,它從 0 平滑過渡到 1。

Swish 激活將線性分量(輸入 x)與非線性分量(sigmoid函數(shù))相結(jié)合,產(chǎn)生平滑且可微的激活函數(shù)。

在哪里使用 Swish 激活?

Swish 可用于各種神經(jīng)網(wǎng)絡(luò)架構(gòu),包括前饋神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò) (CNN) 和循環(huán)神經(jīng)網(wǎng)絡(luò) (RNN)。它的優(yōu)勢在深度網(wǎng)絡(luò)中變得尤為明顯,它可以幫助緩解梯度消失問題。

Swish 激活函數(shù)相對于 ReLU 的優(yōu)點

現(xiàn)在,我們來探討一下 Swish 激活函數(shù)與流行的 ReLU 激活函數(shù)相比的優(yōu)勢。

平滑度和可微分性

由于 sigmoid 分量的存在,Swish 是一個平滑且可微的函數(shù)。此屬性使其非常適合基于梯度的優(yōu)化技術(shù),例如隨機梯度下降 (SGD) 和反向傳播。相比之下,ReLU 在零處不可微(ReLU 的導數(shù)在 x=0 時未定義),這可能會帶來優(yōu)化挑戰(zhàn)。

改進深度網(wǎng)絡(luò)的學習

在深度神經(jīng)網(wǎng)絡(luò)中,與 ReLU 相比,Swish 可以實現(xiàn)更好的學習和收斂。Swish 的平滑性有助于梯度在網(wǎng)絡(luò)中更平滑地流動,減少訓練期間梯度消失的可能性。這在非常深的網(wǎng)絡(luò)中尤其有用。

類似的計算成本

Swish 激活的計算效率很高,類似于 ReLU。這兩個函數(shù)都涉及基本的算術(shù)運算,不會顯著增加訓練或推理過程中的計算負擔。

使用 PyTorch 實現(xiàn)

現(xiàn)在,我們來看看如何使用 PyTorch 實現(xiàn) Swish 激活函數(shù)。我們將創(chuàng)建一個自定義 Swish 模塊并將其集成到一個簡單的神經(jīng)網(wǎng)絡(luò)中。

讓我們從導入必要的庫開始。

import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

一旦我們完成了庫的導入,我們就可以定義自定義激活——Swish。

以下代碼定義了一個繼承 PyTorch 基類的類。類內(nèi)部有一個forward方法。該方法定義模塊如何處理輸入數(shù)據(jù)。它將輸入張量作為參數(shù),并在應用 Swish 激活后返回輸出張量。

# Swish功能
class Swish(nn.Module):
	def forward(self, x):
		return x * torch.sigmoid(x)

定義 Swish 類后,我們繼續(xù)定義神經(jīng)網(wǎng)絡(luò)模型。

在下面的代碼片段中,我們使用 PyTorch 定義了一個專為圖像分類任務設(shè)計的神經(jīng)網(wǎng)絡(luò)模型。

  • 輸入層有28×28像素。

  • 隱藏層

    • 第一個隱藏層由 256 個神經(jīng)元組成。它采用扁平輸入并應用線性變換來產(chǎn)生輸出。
    • 第二個隱藏層由 128 個神經(jīng)元組成,從前一層獲取 256 維輸出并產(chǎn)生 128 維輸出。
    • Swish 激活函數(shù)應用于兩個隱藏層,以向網(wǎng)絡(luò)引入非線性。
    • 輸出層由 10 個神經(jīng)元組成,用于執(zhí)行 10 個類別的分類。
# 定義神經(jīng)網(wǎng)絡(luò)模型
class Net(nn.Module):
	def __init__(self):
		super(Net, self).__init__()
		self.fc1 = nn.Linear(28 * 28, 256)
		self.fc2 = nn.Linear(256, 128)
		self.fc3 = nn.Linear(128, 10)
		self.swish = Swish()

	def forward(self, x):
		x = x.view(-1, 28 * 28)
		x = self.fc1(x)
		x = self.swish(x)
		x = self.fc2(x)
		x = self.swish(x)
		x = self.fc3(x)
		return x

為了設(shè)置用于訓練的神經(jīng)網(wǎng)絡(luò),我們創(chuàng)建模型的實例,定義損失函數(shù)、優(yōu)化器和數(shù)據(jù)轉(zhuǎn)換。

# 創(chuàng)建模型的實例
model = Net()

# 定義損失函數(shù)和優(yōu)化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 定義數(shù)據(jù)轉(zhuǎn)換
transform = transforms.Compose([
	transforms.ToTensor(),
])

完成此步驟后,我們可以繼續(xù)在數(shù)據(jù)集上訓練和評估模型。讓我們使用以下代碼加載 MNIST 數(shù)據(jù)并創(chuàng)建用于訓練的數(shù)據(jù)加載器。

# 加載MNIST數(shù)據(jù)集
train_dataset = datasets.MNIST('', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST('', train=False, download=True, transform=transform)

# 創(chuàng)建數(shù)據(jù)加載器
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

有了這些數(shù)據(jù)加載器,我們就可以繼續(xù)訓練循環(huán)來迭代批量的訓練和測試數(shù)據(jù)。

在下面的代碼中,我們執(zhí)行了神經(jīng)網(wǎng)絡(luò)的訓練循環(huán)。該循環(huán)將重復 5 個時期,在此期間更新模型的權(quán)重,以最大限度地減少損失并提高其在訓練數(shù)據(jù)上的性能。

# 訓練循環(huán)
num_epochs = 5
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

model.to(device)

for epoch in range(num_epochs):
	model.train()
	total_loss = 0.0
	for batch_idx, (data, target) in enumerate(train_loader):
		data, target = data.to(device), target.to(device)
		optimizer.zero_grad()
		output = model(data)
		loss = criterion(output, target)
		loss.backward()
		optimizer.step()
		total_loss += loss.item()
	
	print(f"Epoch {epoch+1}/{num_epochs}, Loss: {total_loss / len(train_loader)}")

輸出:

Epoch 1/5, Loss: 1.6938323568503062
Epoch 2/5, Loss: 0.4569567457397779
Epoch 3/5, Loss: 0.3522500048557917
Epoch 4/5, Loss: 0.31695075702369213
Epoch 5/5, Loss: 0.2961081813474496

最后一步是模型評估步驟。

# 評估循環(huán)
model.eval()
correct = 0
total = 0
with torch.no_grad():
	for data, target in test_loader:
		data, target = data.to(device), target.to(device)
		outputs = model(data)
		_, predicted = torch.max(outputs.data, 1)
		total += target.size(0)
		correct += (predicted == target).sum().item()

print(f"Accuracy on test set: {100 * correct / total}%")

輸出:

Accuracy on test set: 92.02%

結(jié)論

Swish 激活函數(shù)為 ReLU 等傳統(tǒng)激活函數(shù)提供了一種有前景的替代方案。它的平滑性、可微性和改善深度網(wǎng)絡(luò)學習的潛力使其成為現(xiàn)代神經(jīng)網(wǎng)絡(luò)架構(gòu)的寶貴工具。通過在 PyTorch 中實施 Swish,您可以利用其優(yōu)勢并探索其在各種機器學習任務中的有效性。

以上就是使用Pytorch實現(xiàn)Swish激活函數(shù)的示例詳解的詳細內(nèi)容,更多關(guān)于Pytorch Swish激活函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python網(wǎng)絡(luò)安全格式字符串漏洞任意地址覆蓋大數(shù)字詳解

    Python網(wǎng)絡(luò)安全格式字符串漏洞任意地址覆蓋大數(shù)字詳解

    這篇文章主要介紹了Python網(wǎng)絡(luò)安全格式字符串漏洞任意地址覆蓋大數(shù)字的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • Python中的可視化設(shè)計與UI界面實現(xiàn)

    Python中的可視化設(shè)計與UI界面實現(xiàn)

    本文介紹了如何使用Python創(chuàng)建用戶界面(UI),包括使用Tkinter、PyQt、Kivy等庫進行基本窗口、動態(tài)圖表和動畫效果的實現(xiàn),通過示例代碼,展示了如何利用這些庫來構(gòu)建功能強大且美觀的界面
    2025-01-01
  • python主要用于哪些方向

    python主要用于哪些方向

    在本篇文章里小編給大家整理了一篇關(guān)于python用于的方向的相關(guān)文章,有需要的閱讀下吧。
    2020-07-07
  • Pytorch 多塊GPU的使用詳解

    Pytorch 多塊GPU的使用詳解

    今天小編就為大家分享一篇Pytorch 多塊GPU的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python實現(xiàn)自動上京東搶手機

    Python實現(xiàn)自動上京東搶手機

    這篇文章主要為大家詳細介紹了Python實現(xiàn)自動上京東搶手機的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • python列表排序用?sort()和sorted()的區(qū)別

    python列表排序用?sort()和sorted()的區(qū)別

    這篇文章主要介紹了python列表排序用?sort()和sorted()的區(qū)別,主要比較?Python?中用于列表排序的兩種函數(shù)?sort()?和?sorted(),選擇合適的排序函數(shù),下文詳細內(nèi)容需要的小伙伴可以參考一下
    2022-03-03
  • 利用 Python 實現(xiàn)多任務進程

    利用 Python 實現(xiàn)多任務進程

    這篇文章主要介紹如何利用 Python 實現(xiàn)多任務進程,正在執(zhí)行的程序,由程序、數(shù)據(jù)和進程控制塊組成,是正在執(zhí)行的程序,程序的一次執(zhí)行過程,是資源調(diào)度的基本單位。下面就來詳細介紹改內(nèi)容,需要的朋友可以參考一下
    2021-10-10
  • Python實現(xiàn)郵件的批量發(fā)送的示例代碼

    Python實現(xiàn)郵件的批量發(fā)送的示例代碼

    下面小編就為大家分享一篇Python實現(xiàn)郵件的批量發(fā)送的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Ubuntu安裝PySide6開發(fā)桌面應用實踐

    Ubuntu安裝PySide6開發(fā)桌面應用實踐

    文章介紹了在Ubuntu非桌面端安裝PySide6并使用WSL2在Windows上開發(fā)Python桌面應用的全過程,首先,通過wS安裝基礎(chǔ)工具并用使用pip安裝PySide6,接著,在WindowsD安裝VSCode并配置WSL支持支持GUI顯示,最后D在WSL中開發(fā)Python桌面應用
    2026-04-04
  • python爬取51job中hr的郵箱

    python爬取51job中hr的郵箱

    這篇文章主要為大家詳細介紹了python爬取51job中hr的郵箱的相關(guān)資料,需要的朋友可以參考下
    2016-05-05

最新評論

黄龙县| 嘉义市| 宁夏| 嘉祥县| 林西县| 沐川县| 河津市| 五河县| 山丹县| 乌审旗| 新昌县| 松阳县| 宜州市| 柯坪县| 油尖旺区| 海南省| 申扎县| 北宁市| 扎赉特旗| 微博| 大厂| 葵青区| 晋江市| 玉山县| 丹江口市| 浦北县| 大宁县| 泾川县| 阳山县| 获嘉县| 永和县| 湘潭县| 宁蒗| 铜鼓县| 白山市| 南充市| 荃湾区| 平阳县| 亚东县| 衡阳县| 津南区|