国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評估深度學(xué)習(xí)模型

這篇具有很好參考價(jià)值的文章主要介紹了使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評估深度學(xué)習(xí)模型。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

??????歡迎來到我的博客,你將找到有關(guān)如何使用技術(shù)解決問題的文章,也會找到某個(gè)技術(shù)的學(xué)習(xí)路線。無論你是何種職業(yè),我都希望我的博客對你有所幫助。最后不要忘記訂閱我的博客以獲取最新文章,也歡迎在文章下方留下你的評論和反饋。我期待著與你分享知識、互相學(xué)習(xí)和建立一個(gè)積極的社區(qū)。謝謝你的光臨,讓我們一起踏上這個(gè)知識之旅!
使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評估深度學(xué)習(xí)模型,Pytorch,深度學(xué)習(xí),pytorch,分類,python,人工智能

??引言

當(dāng)處理多分類問題時(shí),PyTorch是一種非常有用的深度學(xué)習(xí)框架。在這篇博客中,我們將討論如何使用PyTorch來解決多分類問題。我們將介紹多分類問題的基本概念,構(gòu)建一個(gè)簡單的多分類神經(jīng)網(wǎng)絡(luò)模型,并演示如何準(zhǔn)備數(shù)據(jù)、訓(xùn)練模型和評估結(jié)果。

??什么是多分類問題?

多分類問題是一種機(jī)器學(xué)習(xí)任務(wù),其中目標(biāo)是將輸入數(shù)據(jù)分為多個(gè)不同的類別或標(biāo)簽。與二分類問題不同,多分類問題涉及到三個(gè)或更多類別的分類任務(wù)。例如,圖像分類問題可以將圖像分為不同的類別,如貓、狗、鳥等。

??處理步驟

  • 準(zhǔn)備數(shù)據(jù)
    收集和準(zhǔn)備數(shù)據(jù)集,確保每個(gè)樣本都有相應(yīng)的標(biāo)簽,以指明其所屬類別。
    劃分?jǐn)?shù)據(jù)集為訓(xùn)練集、驗(yàn)證集和測試集,以便進(jìn)行模型訓(xùn)練、調(diào)優(yōu)和性能評估。

  • 數(shù)據(jù)預(yù)處理
    對數(shù)據(jù)進(jìn)行預(yù)處理,例如歸一化、標(biāo)準(zhǔn)化、缺失值處理或數(shù)據(jù)增強(qiáng),以確保模型訓(xùn)練的穩(wěn)定性和性能。

  • 選擇模型架構(gòu)
    選擇適當(dāng)?shù)纳疃葘W(xué)習(xí)模型架構(gòu),通常包括卷積神經(jīng)網(wǎng)絡(luò)(CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)、Transformer等,具體取決于問題的性質(zhì)。

  • 定義損失函數(shù)
    為多分類問題選擇適當(dāng)?shù)膿p失函數(shù),通常是交叉熵?fù)p失(Cross-Entropy Loss)。

  • 選擇優(yōu)化器
    選擇合適的優(yōu)化算法,如隨機(jī)梯度下降(SGD)、Adam、RMSprop等,以訓(xùn)練模型并調(diào)整權(quán)重。

  • 訓(xùn)練模型
    使用訓(xùn)練數(shù)據(jù)集來訓(xùn)練模型。在每個(gè)訓(xùn)練迭代中,通過前向傳播和反向傳播來更新模型參數(shù),以減小損失函數(shù)的值。

  • 評估模型
    使用驗(yàn)證集來評估模型性能。常見的性能指標(biāo)包括準(zhǔn)確性、精確度、召回率、F1分?jǐn)?shù)等。

  • 調(diào)優(yōu)模型
    根據(jù)驗(yàn)證集的性能,對模型進(jìn)行調(diào)優(yōu),可以嘗試不同的超參數(shù)設(shè)置、模型架構(gòu)變化或數(shù)據(jù)增強(qiáng)策略。

  • 測試模型
    最終,在獨(dú)立的測試數(shù)據(jù)集上評估模型的性能,以獲得最終性能評估。

  • 部署模型
    將訓(xùn)練好的模型部署到實(shí)際應(yīng)用中,用于實(shí)時(shí)或批處理多分類任務(wù)。

??多分類問題

之前我們討論的問題都是二分類居多,對于二分類問題,我們?nèi)羟蟮胮(0),南無p(1)=1-p(0),還是比較容易的,但是本節(jié)我們將引入多分類,那么我們所求得就轉(zhuǎn)化為p(i)(i=1,2,3,4…),同時(shí)我們需要滿足以上概率中每一個(gè)都大于0;且總和為1。

處理多分類問題,這里我們新引入了一個(gè)稱為Softmax Layer
使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評估深度學(xué)習(xí)模型,Pytorch,深度學(xué)習(xí),pytorch,分類,python,人工智能

接下來我們一起討論一下Softmax Layer層
使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評估深度學(xué)習(xí)模型,Pytorch,深度學(xué)習(xí),pytorch,分類,python,人工智能
首先我們計(jì)算指數(shù)計(jì)算e的zi次冪,原因很簡單e的指數(shù)函數(shù)恒大于0;分母就是e的z1次冪+e的z2次冪+e的z3次冪…求和,這樣所有的概率和就為1了。


下圖形象的展示了Softmax,Exponent這里指指數(shù),和上面我們說的一樣,先求指數(shù),這樣有了分子,再將所有指數(shù)求和,最后一一divide,得到了每一個(gè)概率。
使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評估深度學(xué)習(xí)模型,Pytorch,深度學(xué)習(xí),pytorch,分類,python,人工智能


接下來我們一起來看看損失函數(shù)
使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評估深度學(xué)習(xí)模型,Pytorch,深度學(xué)習(xí),pytorch,分類,python,人工智能
如果使用numpy進(jìn)行實(shí)現(xiàn),根據(jù)劉二大人的代碼,可以進(jìn)行如下的實(shí)現(xiàn)

import numpy as np
y = np.array([1,0,0])
z = np.array([0.2,0.1,-0.1])
y_pred = np.exp(z)/np.exp(z).sum()
loss = (-y * np.log(y_pred)).sum()
print(loss)

運(yùn)行結(jié)果如下
使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評估深度學(xué)習(xí)模型,Pytorch,深度學(xué)習(xí),pytorch,分類,python,人工智能
注意:神經(jīng)網(wǎng)絡(luò)的最后一層不需要激活


在pytorch中

import torch
y = torch.LongTensor([0])  # 長整型
z = torch.Tensor([[0.2, 0.1, -0.1]])
criterion = torch.nn.CrossEntropyLoss() 
loss = criterion(z, y)
print(loss)

運(yùn)行結(jié)果如下

使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評估深度學(xué)習(xí)模型,Pytorch,深度學(xué)習(xí),pytorch,分類,python,人工智能
下面根據(jù)一個(gè)例子進(jìn)行演示

criterion = torch.nn.CrossEntropyLoss()
Y = torch.LongTensor([2,0,1])
Y_pred1 = torch.Tensor([[0.1, 0.2, 0.9], 
                        [1.1, 0.1, 0.2], 
                        [0.2, 2.1, 0.1]]) 
Y_pred2 = torch.Tensor([[0.8, 0.2, 0.3], 
                        [0.2, 0.3, 0.5], 
                        [0.2, 0.2, 0.5]])
l1 = criterion(Y_pred1, Y)
l2 = criterion(Y_pred2, Y)
print("Batch Loss1 = ", l1.data, "\nBatch Loss2=", l2.data)

運(yùn)行結(jié)果如下
使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評估深度學(xué)習(xí)模型,Pytorch,深度學(xué)習(xí),pytorch,分類,python,人工智能

根據(jù)上面的代碼可以看出第一個(gè)損失比第二個(gè)損失要小。原因很簡單,想對于Y_pred1每一個(gè)預(yù)測的分類與Y是一致的,而Y_pred2則相差了一下,所以損失自然就大了些

??MNIST dataset的實(shí)現(xiàn)

首先第一步還是導(dǎo)包

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

之后是數(shù)據(jù)的準(zhǔn)備

batch_size = 64
# transform可以將其轉(zhuǎn)化為0-1,形狀的轉(zhuǎn)換從28×28轉(zhuǎn)換為,1×28×28
transform = transforms.Compose([
		transforms.ToTensor(),
		transforms.Normalize((0.1307, ), (0.3081, ))   # 均值mean和標(biāo)準(zhǔn)差std
])
train_dataset = datasets.MNIST(root='../dataset/mnist/', 
								train=True,
								download=True,
								transform=transform)  
train_loader = DataLoader(train_dataset,
							shuffle=True,
							batch_size=batch_size)
test_dataset = datasets.MNIST(root='../dataset/mnist/', 
							train=False,
							download=True,
							transform=transform)
test_loader = DataLoader(test_dataset,
						shuffle=False,
						batch_size=batch_size)

使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評估深度學(xué)習(xí)模型,Pytorch,深度學(xué)習(xí),pytorch,分類,python,人工智能
接下來我們構(gòu)建網(wǎng)絡(luò)

class Net(torch.nn.Module):
	def __init__(self):
		super(Net, self).__init__()
		self.l1 = torch.nn.Linear(784, 512) 
		self.l2 = torch.nn.Linear(512, 256) 
		self.l3 = torch.nn.Linear(256, 128) 
		self.l4 = torch.nn.Linear(128, 64) 
		self.l5 = torch.nn.Linear(64, 10)
	def forward(self, x):
		x = x.view(-1, 784)
		x = F.relu(self.l1(x)) 
		x = F.relu(self.l2(x)) 
		x = F.relu(self.l3(x)) 
		x = F.relu(self.l4(x)) 
		return self.l5(x)  # 注意最后一層不做激活
model = Net()

之后定義損失和優(yōu)化器

criterion = torch.nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

接下來就進(jìn)行訓(xùn)練了

def train(epoch):
	running_loss = 0.0
	for batch_idx, data in enumerate(train_loader, 0): 
		inputs, target = data
		optimizer.zero_grad()
		# forward + backward + update
		outputs = model(inputs)
		loss = criterion(outputs, target)
		loss.backward()
		optimizer.step()
		running_loss += loss.item()
	if batch_idx % 300 == 299:
		print('[%d, %5d] loss: %.3f' % (epoch + 1, batch_idx + 1, running_loss / 300)) 
		running_loss = 0.0
def test():
	correct = 0
	total = 0
	with torch.no_grad(): # 這里可以防止內(nèi)嵌代碼不會執(zhí)行梯度
		for data in test_loader:
			images, labels = data
			outputs = model(images)
			_, predicted = torch.max(outputs.data, dim=1)
			total += labels.size(0)
			correct += (predicted == labels).sum().item()
	print('Accuracy on test set: %d %%' % (100 * correct / total))

最后調(diào)用執(zhí)行

if __name__ == '__main__': 
	for epoch in range(10): 
		train(epoch)
		test()

??NLLLoss 和 CrossEntropyLoss

NLLLoss 和 CrossEntropyLoss(也稱為交叉熵?fù)p失)是深度學(xué)習(xí)中常用的兩種損失函數(shù),用于測量模型的輸出與真實(shí)標(biāo)簽之間的差距,通常用于分類任務(wù)。它們有一些相似之處,但也有一些不同之處。

相同點(diǎn):

用途:兩者都用于分類任務(wù),評估模型的輸出和真實(shí)標(biāo)簽之間的差異,以便進(jìn)行模型的訓(xùn)練和優(yōu)化。
數(shù)學(xué)基礎(chǔ):NLLLoss 和 CrossEntropyLoss 本質(zhì)上都是交叉熵?fù)p失的不同變種,它們都以信息論的概念為基礎(chǔ),衡量兩個(gè)概率分布之間的相似度。
輸入格式:它們通常期望模型的輸出是一個(gè)概率分布,表示各個(gè)類別的預(yù)測概率,以及真實(shí)的標(biāo)簽。

不同點(diǎn):

輸入格式:NLLLoss 通常期望輸入是對數(shù)概率(log probabilities),而 CrossEntropyLoss 通常期望輸入是未經(jīng)對數(shù)化的概率。在實(shí)際應(yīng)用中,CrossEntropyLoss 通常與softmax操作結(jié)合使用,將原始模型輸出轉(zhuǎn)化為概率分布,而NLLLoss可以直接使用對數(shù)概率。
對數(shù)化:NLLLoss 要求將模型輸出的概率經(jīng)過對數(shù)化(取對數(shù))以獲得對數(shù)概率,然后與真實(shí)標(biāo)簽的離散概率分布進(jìn)行比較。CrossEntropyLoss 通常在 softmax 操作之后直接使用未對數(shù)化的概率值與真實(shí)標(biāo)簽比較。
輸出維度:NLLLoss 更通用,可以用于多種情況,包括多類別分類和序列生成等任務(wù),因此需要更多的靈活性。CrossEntropyLoss 通常用于多類別分類任務(wù)。

總之,NLLLoss 和 CrossEntropyLoss 都用于分類任務(wù),但它們在輸入格式和使用上存在一些差異。通常,選擇哪個(gè)損失函數(shù)取決于你的模型輸出的格式以及任務(wù)的性質(zhì)。如果你的模型輸出已經(jīng)是對數(shù)概率形式,通常使用NLLLoss,否則通常使用CrossEntropyLoss。

使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評估深度學(xué)習(xí)模型,Pytorch,深度學(xué)習(xí),pytorch,分類,python,人工智能

挑戰(zhàn)與創(chuàng)造都是很痛苦的,但是很充實(shí)。文章來源地址http://www.zghlxwxcb.cn/news/detail-722891.html

到了這里,關(guān)于使用PyTorch解決多分類問題:構(gòu)建、訓(xùn)練和評估深度學(xué)習(xí)模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【深入了解pytorch】PyTorch訓(xùn)練和評估模型

    在機(jī)器學(xué)習(xí)和深度學(xué)習(xí)領(lǐng)域,PyTorch是一個(gè)非常受歡迎的深度學(xué)習(xí)框架。它提供了靈活且強(qiáng)大的工具,使得訓(xùn)練和評估模型變得更加容易。本文將介紹如何使用PyTorch來準(zhǔn)備數(shù)據(jù)集、定義訓(xùn)練循環(huán)、選擇優(yōu)化算法,并展示如何評估模型性能。 在開始訓(xùn)練模型之前,我們首先需要

    2024年02月16日
    瀏覽(22)
  • 基于PyTorch深度學(xué)習(xí)遙感影像地物分類與目標(biāo)檢測、分割及遙感影像問題深度學(xué)習(xí)優(yōu)化

    基于PyTorch深度學(xué)習(xí)遙感影像地物分類與目標(biāo)檢測、分割及遙感影像問題深度學(xué)習(xí)優(yōu)化

    我國高分辨率對地觀測系統(tǒng)重大專項(xiàng)已全面啟動,高空間、高光譜、高時(shí)間分辨率和寬地面覆蓋于一體的全球天空地一體化立體對地觀測網(wǎng)逐步形成,將成為保障國家安全的基礎(chǔ)性和戰(zhàn)略性資源。未來10年全球每天獲取的觀測數(shù)據(jù)將超過10PB,遙感大數(shù)據(jù)時(shí)代已然來臨。隨著小

    2024年02月11日
    瀏覽(32)
  • 【AI】《動手學(xué)-深度學(xué)習(xí)-PyTorch版》筆記(十一):分類問題-softmax回歸

    1)連續(xù)值與離散值 線性回歸模型,適用于輸出為連續(xù)值的情景。 softmax回歸模型,適用于輸出為離散值的情景。例如圖像類別,就需要對離散值進(jìn)行預(yù)測。softmax回歸模型引入了softmax運(yùn)算,使輸出更適合離散值的預(yù)測和訓(xùn)練。 2)輸出個(gè)數(shù) 線性回歸模型,輸出單元為1個(gè),而

    2024年02月14日
    瀏覽(161)
  • PyTorch深度學(xué)習(xí)遙感影像地物分類與目標(biāo)檢測、分割及遙感影像問題深度學(xué)習(xí)優(yōu)化實(shí)踐技術(shù)應(yīng)用

    PyTorch深度學(xué)習(xí)遙感影像地物分類與目標(biāo)檢測、分割及遙感影像問題深度學(xué)習(xí)優(yōu)化實(shí)踐技術(shù)應(yīng)用

    我國高分辨率對地觀測系統(tǒng)重大專項(xiàng)已全面啟動,高空間、高光譜、高時(shí)間分辨率和寬地面覆蓋于一體的全球天空地一體化立體對地觀測網(wǎng)逐步形成,將成為保障國家安全的基礎(chǔ)性和戰(zhàn)略性資源。未來10年全球每天獲取的觀測數(shù)據(jù)將超過10PB,遙感大數(shù)據(jù)時(shí)代已然來臨。隨著小

    2024年02月10日
    瀏覽(25)
  • 使用Python和PyTorch庫構(gòu)建一個(gè)簡單的文本分類大模型:

    使用Python和PyTorch庫構(gòu)建一個(gè)簡單的文本分類大模型:

    ????????在當(dāng)今的大數(shù)據(jù)時(shí)代,文本分類任務(wù)在許多領(lǐng)域都有著廣泛的應(yīng)用,如情感分析、垃圾郵件過濾、主題分類等。為了有效地處理這些任務(wù),我們通常需要構(gòu)建一個(gè)強(qiáng)大的文本分類模型。在本篇博客中,我們將使用Python和PyTorch庫來構(gòu)建一個(gè)簡單的文本分類大模型,

    2024年01月25日
    瀏覽(23)
  • PyTorch深度學(xué)習(xí)實(shí)戰(zhàn)(3)——使用PyTorch構(gòu)建神經(jīng)網(wǎng)絡(luò)

    PyTorch深度學(xué)習(xí)實(shí)戰(zhàn)(3)——使用PyTorch構(gòu)建神經(jīng)網(wǎng)絡(luò)

    我們已經(jīng)學(xué)習(xí)了如何從零開始構(gòu)建神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)通常包括輸入層、隱藏層、輸出層、激活函數(shù)、損失函數(shù)和學(xué)習(xí)率等基本組件。在本節(jié)中,我們將學(xué)習(xí)如何在簡單數(shù)據(jù)集上使用 PyTorch 構(gòu)建神經(jīng)網(wǎng)絡(luò),利用張量對象操作和梯度值計(jì)算更新網(wǎng)絡(luò)權(quán)重。 1.1 使用 PyTorch 構(gòu)建神

    2024年02月08日
    瀏覽(25)
  • 【pytorch實(shí)用小技巧】單gpu與多gpu訓(xùn)練與評估

    1、單gpu 首先檢查GPU是否可用,并將模型、輸入數(shù)據(jù)和目標(biāo)標(biāo)簽移動到GPU上。 然后,定義損失函數(shù)和優(yōu)化器。在訓(xùn)練循環(huán)中,將模型設(shè)置為訓(xùn)練模式,進(jìn)行前向傳播、計(jì)算損失、反向傳播和參數(shù)更新。 在測試階段,將模型設(shè)置為評估模式,并在測試數(shù)據(jù)上進(jìn)行推斷。 2、多

    2024年02月12日
    瀏覽(18)
  • 解決pytorch訓(xùn)練的過程中內(nèi)存一直增加的問題

    代碼中存在累加loss,但每步的loss沒加item() 以上代碼會導(dǎo)致內(nèi)存占用越來越大,解決的方法是:train_l oss[\\\'loss\\\'] += loss.item() 以及 eval_loss[\\\'loss\\\'] += loss.item()。值得注意的是,要復(fù)現(xiàn)內(nèi)存越來越大的問題,模型中需要切換model.train() 和 model.eval(),train_loss以及eval_loss的作用是保存模

    2024年02月04日
    瀏覽(28)
  • 【pytorch】使用訓(xùn)練好后的模型權(quán)重,在驗(yàn)證集上輸出分類的混淆矩陣并保存錯誤圖片

    【pytorch】使用訓(xùn)練好后的模型權(quán)重,在驗(yàn)證集上輸出分類的混淆矩陣并保存錯誤圖片

    在機(jī)器學(xué)習(xí)領(lǐng)域,混淆矩陣是一個(gè)非常有用的指標(biāo),它可以幫助我們更好地理解模型在驗(yàn)證集上的表現(xiàn)。本文介紹了如何使用pytorch框架,利用訓(xùn)練好后的模型權(quán)重,在驗(yàn)證集上輸出分類的混淆矩陣,并保存錯誤圖片的方法。 首先,我們需要準(zhǔn)備一個(gè)pytorch框架的模型,并將模

    2024年02月13日
    瀏覽(49)
  • 人工智能(Pytorch)搭建GRU網(wǎng)絡(luò),構(gòu)造數(shù)據(jù)實(shí)現(xiàn)訓(xùn)練過程與評估

    人工智能(Pytorch)搭建GRU網(wǎng)絡(luò),構(gòu)造數(shù)據(jù)實(shí)現(xiàn)訓(xùn)練過程與評估

    大家好,我是微學(xué)AI,今天給大家介紹一下人工智能(Pytorch)搭建模型3-GRU網(wǎng)絡(luò)的構(gòu)建,構(gòu)造數(shù)據(jù)實(shí)現(xiàn)訓(xùn)練過程與評估,讓大家了解整個(gè)訓(xùn)練的過程。 GRU(Gated Recurrent Unit,門控循環(huán)單元)是一種循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的變體,用于處理序列數(shù)據(jù)。對于每個(gè)時(shí)刻,GRU模型都根據(jù)當(dāng)前

    2023年04月09日
    瀏覽(101)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包