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

PyTorch訓(xùn)練簡(jiǎn)單的全連接神經(jīng)網(wǎng)絡(luò):手寫數(shù)字識(shí)別

這篇具有很好參考價(jià)值的文章主要介紹了PyTorch訓(xùn)練簡(jiǎn)單的全連接神經(jīng)網(wǎng)絡(luò):手寫數(shù)字識(shí)別。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

pytorch 神經(jīng)網(wǎng)絡(luò)訓(xùn)練demo

數(shù)據(jù)集:MNIST

該數(shù)據(jù)集的內(nèi)容是手寫數(shù)字識(shí)別,其分為兩部分,分別含有60000張訓(xùn)練圖片和10000張測(cè)試圖片

神經(jīng)網(wǎng)絡(luò):全連接網(wǎng)絡(luò)

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

# Create Fully Connected Network
class NN(nn.Module):
    def __init__(self, input_size, num_classes): #(28 * 28 = 784)
        super(NN, self).__init__()
        self.fc1 = nn.Linear(input_size, 50)
        self.fc2 = nn.Linear(50, num_classes)

    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = NN(784, 10)
x = torch.randn(64, 784)

# Set device
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

# Hyperparameters
input_size = 784
num_classes = 10
learning_rate = 0.001
batch_size = 64
num_epochs = 1


# Load data
train_dataset = datasets.MNIST(root='dataset/', 
                               train=True, 
                               transform=transforms.ToTensor(),
                               download=True)
train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)
# print(f'train_loader: {train_loader}')
test_dataset = datasets.MNIST(root='dataset/', 
                              train=False, 
                               transform=transforms.ToTensor(),
                               download=True)
test_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=True)

# Initialize network
model = NN(input_size=input_size, num_classes=num_classes).to(device)

# Loss and optimizer
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)

# Train network
for epoch in range(num_epochs):
    # data: images, targets: labels
    for batch_idx, (data, targets) in enumerate(train_loader):
        # Get data to cuda if possible
        data = data.to(device)
        targets = targets.to(device)
        # Get to correct shape
        # print(data.shape) # (batch_size, input_channel, height, width)
        data = data.reshape(data.shape[0], -1) # 64*784

        # forward
        scores = model(data) # 64*10
        # print(f'scores: {scores.shape}') # 64*10
        # print(f'targets: {targets.shape}') # 64*1
    
        loss = criterion(scores, targets)

        # backward
        optimizer.zero_grad()
        loss.backward()

        # gradient descent or adam step
        optimizer.step()


# Check accuracy on training & test to see how good our model
def check_accuracy(loader, model):
    if loader.dataset.train:
        print("Checking accuracy on training data")
    else:
        print("Checking accuracy on test data")
    num_correct = 0
    num_samples = 0
    model.eval()

    with torch.no_grad(): # 不計(jì)算梯度
        for x, y in loader:
            x = x.to(device)
            y = y.to(device)
            x = x.reshape(x.shape[0], -1) # 64*784

            scores = model(x)# 64*10
            # torch.max()這個(gè)函數(shù)返回的是兩個(gè)值:
                #第一個(gè)值是具體的value(我們用下劃線_表示)
                #第二個(gè)值是value所在的index(也就是predictions)。
            # 我們不關(guān)心最大值是什么,而關(guān)心最大值對(duì)應(yīng)的index是什么,所以選用下劃線代表不需要用到的變量。
            # 比如在圖像分類任務(wù)中,index就對(duì)應(yīng)著圖片的類別,這里我們只關(guān)心網(wǎng)絡(luò)預(yù)測(cè)的類別是什么,而不關(guān)心該類別的預(yù)測(cè)概率。
            _, predictions = scores.max(dim=1) #dim=1,表示對(duì)每行取最大值,每行代表一個(gè)樣本。
            num_correct += (predictions == y).sum()
            num_samples += predictions.size(0) # 64

        print(f'Got {num_correct} / {num_samples} with accuracy {float(num_correct)/float(num_samples)*100:.2f}%')

    model.train()

check_accuracy(train_loader, model)
check_accuracy(test_loader, model)

輸出結(jié)果

Checking accuracy on training data
Got 55770 / 60000 with accuracy 92.95%
Checking accuracy on test data
Got 9316 / 10000 with accuracy 93.16%

來源

【1】https://www.youtube.com/watch?v=Jy4wM2X21u0&list=PLhhyoLH6IjfxeoooqP9rhU3HJIAVAJ3Vz&index=3文章來源地址http://www.zghlxwxcb.cn/news/detail-579138.html

到了這里,關(guān)于PyTorch訓(xùn)練簡(jiǎn)單的全連接神經(jīng)網(wǎng)絡(luò):手寫數(shù)字識(shí)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【神經(jīng)網(wǎng)絡(luò)手寫數(shù)字識(shí)別-最全源碼(pytorch)】

    【神經(jīng)網(wǎng)絡(luò)手寫數(shù)字識(shí)別-最全源碼(pytorch)】

    Torch安裝的方法 學(xué)習(xí)方法 1.邊用邊學(xué),torch只是一個(gè)工具,真正用,查的過程才是學(xué)習(xí)的過程 2.直接就上案例就行,先來跑,遇到什么來解決什么 Mnist分類任務(wù): 網(wǎng)絡(luò)基本構(gòu)建與訓(xùn)練方法,常用函數(shù)解析 torch.nn.functional模塊 nn.Module模塊 讀取Mnist數(shù)據(jù)集 會(huì)自動(dòng)進(jìn)行下載 784是m

    2024年02月14日
    瀏覽(47)
  • pytorch集智-5手寫數(shù)字識(shí)別器-卷積神經(jīng)網(wǎng)絡(luò)

    pytorch集智-5手寫數(shù)字識(shí)別器-卷積神經(jīng)網(wǎng)絡(luò)

    簡(jiǎn)稱:CNN,convolutional neural network 應(yīng)用場(chǎng)景:圖像識(shí)別與分類(CNN),看圖說話(CNN+RNN)等 優(yōu)越性:和多層感知機(jī)相比,cnn可以識(shí)別獨(dú)特的模式,可以自動(dòng)從數(shù)據(jù)中提取特征。一般機(jī)器學(xué)習(xí)需要特征工程,cnn可以自動(dòng)識(shí)別,極大代替或取代了特征工程 和多層感知機(jī)原理不同

    2024年01月19日
    瀏覽(24)
  • 6.6 實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)LeNet訓(xùn)練并預(yù)測(cè)手寫體數(shù)字

    6.6 實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)LeNet訓(xùn)練并預(yù)測(cè)手寫體數(shù)字

    isinstance(net,nn.Module)是Python的內(nèi)置函數(shù),用于判斷一個(gè)對(duì)象是否屬于制定類或其子類的實(shí)例。如果net是nn.Module類或子類的實(shí)例,那么表達(dá)式返回True,否則返回False. nn.Module是pytorch中用于構(gòu)建神經(jīng)網(wǎng)絡(luò)模型的基類,其他神經(jīng)網(wǎng)絡(luò)都會(huì)繼承它,因此使用 isinstance(net,nn.Module),可以確

    2024年02月14日
    瀏覽(25)
  • pytorch學(xué)習(xí)——如何構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)——以手寫數(shù)字識(shí)別為例

    pytorch學(xué)習(xí)——如何構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)——以手寫數(shù)字識(shí)別為例

    目錄 一.概念介紹 1.1神經(jīng)網(wǎng)絡(luò)核心組件 1.2神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示意圖 1.3使用pytorch構(gòu)建神經(jīng)網(wǎng)絡(luò)的主要工具 二、實(shí)現(xiàn)手寫數(shù)字識(shí)別 2.1環(huán)境 2.2主要步驟 2.3神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu) 2.4準(zhǔn)備數(shù)據(jù) 2.4.1導(dǎo)入模塊 2.4.2定義一些超參數(shù) 2.4.3下載數(shù)據(jù)并對(duì)數(shù)據(jù)進(jìn)行預(yù)處理 2.4.4可視化數(shù)據(jù)集中部分元素 ?2

    2024年02月14日
    瀏覽(47)
  • 【Python機(jī)器學(xué)習(xí)】實(shí)驗(yàn)14 手寫體卷積神經(jīng)網(wǎng)絡(luò)(PyTorch實(shí)現(xiàn))

    【Python機(jī)器學(xué)習(xí)】實(shí)驗(yàn)14 手寫體卷積神經(jīng)網(wǎng)絡(luò)(PyTorch實(shí)現(xiàn))

    LeNet-5是卷積神經(jīng)網(wǎng)絡(luò)模型的早期代表,它由LeCun在1998年提出。該模型采用順序結(jié)構(gòu),主要包括7層(2個(gè)卷積層、2個(gè)池化層和3個(gè)全連接層),卷積層和池化層交替排列。以mnist手寫數(shù)字分類為例構(gòu)建一個(gè)LeNet-5模型。每個(gè)手寫數(shù)字圖片樣本的寬與高均為28像素,樣本標(biāo)簽值是0~

    2024年02月12日
    瀏覽(27)
  • 卷積神經(jīng)網(wǎng)絡(luò)CNN原理+代碼(pytorch實(shí)現(xiàn)MNIST集手寫數(shù)字分類任務(wù))

    卷積神經(jīng)網(wǎng)絡(luò)CNN原理+代碼(pytorch實(shí)現(xiàn)MNIST集手寫數(shù)字分類任務(wù))

    前言 若將圖像數(shù)據(jù)輸入全連接層,可能會(huì)導(dǎo)致喪失一些位置信息 卷積神經(jīng)網(wǎng)絡(luò)將圖像按照原有的空間結(jié)構(gòu)保存,不會(huì)喪失位置信息。 卷積運(yùn)算: 1.以單通道為例: 將將input中選中的部分與kernel進(jìn)行數(shù)乘 : 以上圖為例對(duì)應(yīng)元素相乘結(jié)果為211,并將結(jié)果填入output矩陣的左上角

    2024年02月04日
    瀏覽(24)
  • [pytorch]手動(dòng)構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)并且訓(xùn)練

    上一篇博客全都是說明類型的,實(shí)際代碼能不能跑起來兩說,謹(jǐn)慎觀看.本文中直接使用fashions數(shù)據(jù)實(shí)現(xiàn)softmax的簡(jiǎn)單訓(xùn)練并且完成結(jié)果輸出.實(shí)現(xiàn)一個(gè)預(yù)測(cè)并且觀測(cè)到輸出結(jié)果. 并且更重要的是,在這里對(duì)一些訓(xùn)練的過程,數(shù)據(jù)的形式,以及我們?cè)趕oftmax中主要做什么以及怎么做來進(jìn)行說

    2024年02月05日
    瀏覽(22)
  • PyTorch深度學(xué)習(xí)實(shí)戰(zhàn)(1)——神經(jīng)網(wǎng)絡(luò)與模型訓(xùn)練過程詳解

    PyTorch深度學(xué)習(xí)實(shí)戰(zhàn)(1)——神經(jīng)網(wǎng)絡(luò)與模型訓(xùn)練過程詳解

    人工神經(jīng)網(wǎng)絡(luò) ( Artificial Neural Network , ANN ) 是一種監(jiān)督學(xué)習(xí)算法,其靈感來自人類大腦的運(yùn)作方式。類似于人腦中神經(jīng)元連接和激活的方式,神經(jīng)網(wǎng)絡(luò)接受輸入,通過某些函數(shù)在網(wǎng)絡(luò)中進(jìn)行傳遞,導(dǎo)致某些后續(xù)神經(jīng)元被激活,從而產(chǎn)生輸出。函數(shù)越復(fù)雜,網(wǎng)絡(luò)對(duì)于輸入的數(shù)據(jù)擬

    2024年02月06日
    瀏覽(26)
  • []關(guān)于解決pytorch訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)顯存一直增長(zhǎng)的問題

    @[原創(chuàng)]關(guān)于解決pytorch訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)顯存一直增長(zhǎng)的問題 在訓(xùn)練自定義loss和自定義網(wǎng)絡(luò)結(jié)構(gòu)的一個(gè)模型的時(shí)候,發(fā)現(xiàn)模型和數(shù)據(jù)都比較簡(jiǎn)單的情況下,在訓(xùn)練過程中居然把24g的顯卡拉爆了顯存。 然后使用nvidia-smi -l觀察顯存變化,發(fā)現(xiàn)是有規(guī)律的顯存一直增加,直到OOM。 在

    2024年02月14日
    瀏覽(19)
  • python pytorch 純算法實(shí)現(xiàn)前饋神經(jīng)網(wǎng)絡(luò)訓(xùn)練(數(shù)據(jù)集隨機(jī)生成)-續(xù)

    python pytorch 純算法實(shí)現(xiàn)前饋神經(jīng)網(wǎng)絡(luò)訓(xùn)練(數(shù)據(jù)集隨機(jī)生成)-續(xù)

    上一次的代碼博主看了,有兩個(gè)小問題其實(shí),一個(gè)是,SGD優(yōu)化的時(shí)候,那個(gè)梯度應(yīng)該初始化為0,還一個(gè)是我并沒有用到隨機(jī)生成batch。 博主修改了代碼,并且加入了accuracy圖像繪制的代碼。代碼如下: 可一下跑出的結(jié)果: 可以看到這樣看下來,效果就很不錯(cuò)了。

    2024年02月13日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包