精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PyTorch的介紹與使用案例

CHANBAEK ? 來源:網(wǎng)絡整理 ? 2024-07-10 14:19 ? 次閱讀

PyTorch簡介

PyTorch是一個基于Python的開源機器學習庫,它主要面向深度學習和科學計算領域。PyTorch由Meta Platforms(原Facebook)的人工智能研究團隊開發(fā),并逐漸發(fā)展成為深度學習領域的一個重要工具。PyTorch底層由C++實現(xiàn),提供了豐富的API接口,使得開發(fā)者能夠高效地構建和訓練神經(jīng)網(wǎng)絡模型。PyTorch不僅支持動態(tài)計算圖,還提供了強大的自動微分系統(tǒng),極大地簡化了深度學習任務的開發(fā)流程。

主要特點

  1. 動態(tài)計算圖 :PyTorch使用動態(tài)計算圖,與TensorFlow等使用靜態(tài)計算圖的框架不同,這使得PyTorch在編寫和調試神經(jīng)網(wǎng)絡時更加靈活和直觀。
  2. 豐富的庫和工具 :PyTorch提供了大量的預訓練模型和工具,支持各種神經(jīng)網(wǎng)絡結構,包括卷積神經(jīng)網(wǎng)絡(CNN)、循環(huán)神經(jīng)網(wǎng)絡(RNN)、生成對抗網(wǎng)絡(GAN)等。
  3. 易用性 :PyTorch的API設計簡潔直觀,易于上手,同時支持GPU加速,能夠充分利用硬件資源提高計算效率。
  4. 社區(qū)支持 :PyTorch擁有龐大的社區(qū)支持,開發(fā)者可以輕松地找到各種資源和解決方案。

安裝

PyTorch的安裝非常簡單,可以通過pip命令直接安裝。例如,在命令行中運行以下命令即可安裝PyTorch及其常用子庫torchvision(用于圖像處理和數(shù)據(jù)加載):

pip install torch torchvision

PyTorch的基本使用

張量(Tensor)

在PyTorch中,張量(Tensor)是核心的數(shù)據(jù)結構,用于存儲和操作多維數(shù)組。張量類似于NumPy的ndarray,但可以在GPU上運行,以加速計算。

import torch  
  
# 創(chuàng)建一個5x3的未初始化的張量  
x = torch.empty(5, 3)  
print(x)  
  
# 創(chuàng)建一個已初始化為零的5x3張量  
x = torch.zeros(5, 3)  
print(x)  
  
# 創(chuàng)建一個形狀為5x3的張量,并用隨機數(shù)填充  
x = torch.randn(5, 3)  
print(x)

自動微分(Autograd)

PyTorch的自動微分系統(tǒng)能夠自動計算張量上所有操作的梯度。這對于神經(jīng)網(wǎng)絡的訓練至關重要。通過設置requires_grad=True,PyTorch會追蹤對該張量的所有操作,并在需要時計算梯度。

import torch  
  
# 創(chuàng)建一個張量并設置requires_grad=True來追蹤其計算歷史  
x = torch.ones(2, 2, requires_grad=True)  
y = x + 2  
z = y * y * 3  
out = z.mean()  
  
# 對out進行反向傳播,計算梯度  
out.backward()  
print(x.grad)  # 輸出x的梯度

神經(jīng)網(wǎng)絡模塊

PyTorch的torch.nn模塊提供了構建神經(jīng)網(wǎng)絡的構建塊。通過繼承nn.Module類,可以定義自己的神經(jīng)網(wǎng)絡結構。

import torch  
import torch.nn as nn  
import torch.nn.functional as F  
  
class Net(nn.Module):  
    def __init__(self):  
        super(Net, self).__init__()  
        self.conv1 = nn.Conv2d(1, 6, 3)  
        self.conv2 = nn.Conv2d(6, 16, 3)  
        self.fc1 = nn.Linear(16 * 6 * 6, 120)  
        self.fc2 = nn.Linear(120, 84)  
        self.fc3 = nn.Linear(84, 10)  
  
    def forward(self, x):  
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))  
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)  
        x = x.view(-1, self.num_flat_features(x))  
        x = F.relu(self.fc1(x))  
        x = F.relu(self.fc2(x))  
        x = self.fc3(x)  
        return x  
  
    def num_flat_features(self, x):  
        size = x.size()[1:]  # 獲取所有維度的大小,除了批處理維度  
        num_features = 1  
        for s in size:  
            num_features *= s  
        return num_features

PyTorch的使用案例

圖像處理

PyTorch在圖像處理領域有著廣泛的應用,例如圖像分類、目標檢測、圖像分割等。以下是一個使用PyTorch進行圖像分類的簡單案例。

圖像分類案例

在這個案例中,我們將使用PyTorch來訓練一個基本的卷積神經(jīng)網(wǎng)絡(CNN),用于對CIFAR-10數(shù)據(jù)集進行分類。CIFAR-10是一個包含60000張32x32彩色圖像的數(shù)據(jù)集,分為10個類別,每個類別有6000張圖像。

1. 數(shù)據(jù)加載與預處理

首先,我們需要從PyTorch的torchvision模塊中加載CIFAR-10數(shù)據(jù)集,并進行必要的預處理。

import torch  
import torchvision  
import torchvision.transforms as transforms  
  
# 數(shù)據(jù)預處理  
transform = transforms.Compose([  
    transforms.ToTensor(),  # 將圖片轉換為Tensor  
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))  # 歸一化  
])  
  
# 加載訓練集和測試集  
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,  
                                        download=True, transform=transform)  
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,  
                                          shuffle=True, num_workers=2)  
  
testset = torchvision.datasets.CIFAR10(root='./data', train=False,  
                                       download=True, transform=transform)  
testloader = torch.utils.data.DataLoader(testset, batch_size=4,  
                                         shuffle=False, num_workers=2)  
  
classes = ('plane', 'car', 'bird', 'cat',  
           'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

2. 定義網(wǎng)絡模型

接下來,我們定義一個簡單的CNN模型,用于處理CIFAR-10的圖像數(shù)據(jù)。

import torch.nn as nn  
import torch.nn.functional as F  
  
class Net(nn.Module):  
    def __init__(self):  
        super(Net, self).__init__()  
        self.conv1 = nn.Conv2d(3, 6, 5)  
        self.pool = nn.MaxPool2d(2, 2)  
        self.conv2 = nn.Conv2d(6, 16, 5)  
        self.fc1 = nn.Linear(16 * 5 * 5, 120)  
        self.fc2 = nn.Linear(120, 84)  
        self.fc3 = nn.Linear(84, 10)  
  
    def forward(self, x):  
        x = self.pool(F.relu(self.conv1(x)))  
        x = self.pool(F.relu(self.conv2(x)))  
        x = x.view(-1, 16 * 5 * 5)  
        x = F.relu(self.fc1(x))  
        x = F.relu(self.fc2(x))  
        x = self.fc3(x)  
        return x  
  
net = Net()

3. 損失函數(shù)與優(yōu)化器

選擇適當?shù)膿p失函數(shù)(如交叉熵損失)和優(yōu)化器(如SGD或Adam)。

import torch.optim as optim  
  
criterion = nn.CrossEntropyLoss()  
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

4. 訓練網(wǎng)絡

訓練網(wǎng)絡通常涉及多個epoch的迭代,每個epoch中遍歷整個數(shù)據(jù)集一次。

for epoch in range(10):  # 遍歷數(shù)據(jù)集多次  
  
    running_loss = 0.0  
    for i, data in enumerate(trainloader, 0):  
        # 獲取輸入  
        inputs, labels = data  
  
        # 梯度置零  
        optimizer.zero_grad()  
  
        # 前向 + 反向 + 優(yōu)化  
        outputs = net(inputs)  
        loss = criterion(outputs, labels)  
        loss.backward()  
        optimizer.step()  
  
        # 打印統(tǒng)計信息  
        running_loss += loss.item()  
        if i % 2000 == 1999:    # 每2000個mini-batches打印一次  
            print(f'[{epoch + 1}, {i + 1:5d}] loss: {running_loss / 2000:.3f}')  
            running loss = 0.0
print(f'Finished Epoch {epoch+1}, Loss: {running_loss/len(trainloader):.3f}')

5. 測試網(wǎng)絡

在測試集上評估網(wǎng)絡的性能,確保模型在未見過的數(shù)據(jù)上也能表現(xiàn)良好。

correct = 0  
total = 0  
with torch.no_grad():  
    for data in testloader:  
        images, labels = data  
        outputs = net(images)  
        _, predicted = torch.max(outputs.data, 1)  
        total += labels.size(0)  
        correct += (predicted == labels).sum().item()  
  
print(f'Accuracy of the network on the 10000 test images: {100 * correct / total}%')

6. 保存模型

在訓練完成后,你可能希望保存模型以便將來使用或進一步分析。

torch.save(net.state_dict(), 'cifar_net.pth')

7. 加載模型進行預測

當你需要再次使用模型進行預測時,可以加載保存的模型狀態(tài)。

net = Net()  
net.load_state_dict(torch.load('cifar_net.pth'))  
  
# 假設你有一個新的圖像輸入  
# 你可以使用相同的transform來處理這個新圖像,然后將其送入網(wǎng)絡進行預測  
  
# 示例:僅用于說明,需要替換為實際的圖像數(shù)據(jù)  
example_input = torch.randn(1, 3, 32, 32)  # 假設的新圖像輸入,需要是tensor格式  
example_input = example_input.to(device)  # 假設你有一個device設置  
  
# 前向傳播  
output = net(example_input)  
_, predicted = torch.max(output, 1)  
print(f'Predicted class: {classes[predicted.item()]}')

注意

  • 在實際使用中,你可能需要處理更復雜的模型結構、更多的數(shù)據(jù)增強技術、正則化方法、學習率調整策略等。
  • 此外,使用GPU可以顯著提高訓練速度。你可以通過設置device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")并在需要將數(shù)據(jù)或模型移至GPU時使用.to(device)來實現(xiàn)這一點。
  • 在進行模型評估時,記得將模型設置為評估模式(net.eval()),這可以關閉某些層的dropout和batch normalization的行為,確保模型在評估時表現(xiàn)一致。
  • 考慮到CIFAR-10數(shù)據(jù)集的大小和復雜性,上述模型可能不是最優(yōu)的。你可以嘗試使用更深的網(wǎng)絡結構,如ResNet、VGG等,以獲得更好的性能。
    當然,讓我們繼續(xù)深入探討一些在實際應用中可能會遇到的額外步驟和考慮因素。

8. 模型評估與驗證

在訓練過程中,除了最終的測試集評估外,使用驗證集(validation set)來監(jiān)控模型的性能是非常重要的。驗證集是從訓練數(shù)據(jù)中分離出來的一部分,用于在訓練過程中調整超參數(shù)(如學習率、批量大小、網(wǎng)絡架構等),而不直接參與模型的訓練。

# 假設你已經(jīng)有了trainloader, validloader, testloader  
best_acc = 0.0  
for epoch in range(num_epochs):  
    # 訓練階段...  
      
    # 驗證階段  
    net.eval()  # 設置為評估模式  
    valid_loss = 0.0  
    correct = 0  
    total = 0  
    with torch.no_grad():  
        for data in validloader:  
            images, labels = data  
            outputs = net(images)  
            loss = criterion(outputs, labels)  
            valid_loss += loss.item()  
            _, predicted = torch.max(outputs.data, 1)  
            total += labels.size(0)  
            correct += (predicted == labels).sum().item()  
  
    valid_loss /= len(validloader)  
    valid_acc = 100 * correct / total  
      
    # 保存最佳模型  
    if valid_acc > best_acc:  
        best_acc = valid_acc  
        torch.save(net.state_dict(), 'best_cifar_net.pth')  
      
    print(f'Epoch {epoch+1}, Validation Loss: {valid_loss:.4f}, Validation Accuracy: {valid_acc:.2f}%')  
      
    net.train()  # 回到訓練模式  
  
# 加載最佳模型進行評估  
net.load_state_dict(torch.load('best_cifar_net.pth'))  
# 進行測試集評估...

9. 超參數(shù)調優(yōu)

參數(shù)調優(yōu)是深度學習中的一個重要步驟,它涉及調整模型訓練過程中的各種參數(shù),如學習率、批量大小、權重衰減(正則化參數(shù))、訓練輪次(epochs)等,以獲得最佳的模型性能。這通常通過交叉驗證或網(wǎng)格搜索等方法來完成。

10. 數(shù)據(jù)增強

數(shù)據(jù)增強是一種通過增加訓練數(shù)據(jù)的多樣性來提高模型泛化能力的技術。對于圖像數(shù)據(jù),這可以包括隨機裁剪、旋轉、翻轉、調整亮度和對比度等操作。

transform_train = transforms.Compose([  
    transforms.RandomCrop(32, padding=4),  
    transforms.RandomHorizontalFlip(),  
    transforms.ToTensor(),  
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))  
])  
  
# 加載訓練集時使用transform_train

11. 模型集成

模型集成是一種通過組合多個模型的預測結果來提高整體性能的技術。這可以通過簡單的平均、投票、堆疊(Stacking)等方法來實現(xiàn)。

12. 部署模型

訓練好的模型最終需要被部署到實際應用中。這通常涉及將模型轉換為適合部署的格式(如ONNX、TorchScript等),并將其集成到應用程序或服務中。

13. 監(jiān)控與維護

部署后的模型需要持續(xù)監(jiān)控其性能,并根據(jù)需要進行更新或重新訓練。這包括監(jiān)控模型的準確性、響應時間和資源使用情況,以及處理新出現(xiàn)的數(shù)據(jù)偏差或概念漂移等問題。

通過這些步驟,你可以構建一個健壯的圖像分類系統(tǒng),并將其成功部署到實際應用中。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器學習
    +關注

    關注

    66

    文章

    8377

    瀏覽量

    132406
  • python
    +關注

    關注

    56

    文章

    4782

    瀏覽量

    84449
  • pytorch
    +關注

    關注

    2

    文章

    803

    瀏覽量

    13145
收藏 人收藏

    評論

    相關推薦

    Pytorch模型訓練實用PDF教程【中文】

    PyTorch 提供的數(shù)據(jù)增強方法(22 個)、權值初始化方法(10 個)、損失函數(shù)(17 個)、優(yōu)化器(6 個)及 tensorboardX 的方法(13 個)進行了詳細介紹。本教程分為四章
    發(fā)表于 12-21 09:18

    Pytorch自動求導示例

    Pytorch自動微分的幾個例子
    發(fā)表于 08-09 11:56

    Pytorch入門之的基本操作

    Pytorch入門之基本操作
    發(fā)表于 05-22 17:15

    PyTorch如何入門

    PyTorch 入門實戰(zhàn)(一)——Tensor
    發(fā)表于 06-01 09:58

    PyTorch10的基礎教程

    PyTorch 10 基礎教程(4):訓練分類器
    發(fā)表于 06-05 17:42

    Pytorch AI語音助手

    想做一個Pytorch AI語音助手,有沒有好的思路呀?
    發(fā)表于 03-06 13:00

    如何安裝TensorFlow2 Pytorch

    如何安裝TensorFlow2 Pytorch
    發(fā)表于 03-07 07:32

    通過Cortex來非常方便的部署PyTorch模型

    到軟件中。如何從“跨語言語言模型”轉換為谷歌翻譯?在這篇博客文章中,我們將了解在生產(chǎn)環(huán)境中使用 PyTorch 模型意味著什么,然后介紹一種允許部署任何 PyTorch 模型以便在軟件中使用的方法。在生
    發(fā)表于 11-01 15:25

    如何往星光2板子里裝pytorch

    如題,想先gpu版本的pytorch只安裝cpu版本的pytorch,pytorch官網(wǎng)提供了基于conda和pip兩種安裝方式。因為咱是risc架構沒對應的conda,而使用pip安裝提示也沒有
    發(fā)表于 09-12 06:30

    一篇非常新的介紹PyTorch內部機制的文章

    譯者序:這篇博文是一篇非常新的介紹PyTorch內部機制的文章,作者Edward Z Yang來自于Stanford大學,是PyTorch的核心開發(fā)者之一。文章中介紹了如何閱讀
    的頭像 發(fā)表于 12-26 10:17 ?2136次閱讀
    一篇非常新的<b class='flag-5'>介紹</b><b class='flag-5'>PyTorch</b>內部機制的文章

    基于PyTorch的深度學習入門教程之PyTorch簡單知識

    本文參考PyTorch官網(wǎng)的教程,分為五個基本模塊來介紹PyTorch。為了避免文章過長,這五個模塊分別在五篇博文中介紹。 Part1:PyTorc
    的頭像 發(fā)表于 02-16 15:20 ?2216次閱讀

    基于PyTorch的深度學習入門教程之PyTorch的自動梯度計算

    本文參考PyTorch官網(wǎng)的教程,分為五個基本模塊來介紹PyTorch。為了避免文章過長,這五個模塊分別在五篇博文中介紹。 Part1:PyTorc
    的頭像 發(fā)表于 02-16 15:26 ?1990次閱讀

    基于PyTorch的深度學習入門教程之使用PyTorch構建一個神經(jīng)網(wǎng)絡

    ? ? ? ? 前言 本文參考PyTorch官網(wǎng)的教程,分為五個基本模塊來介紹PyTorch。為了避免文章過長,這五個模塊分別在五篇博文中介紹。 Part1:
    的頭像 發(fā)表于 02-15 09:40 ?2072次閱讀

    深度學習框架pytorch介紹

    深度學習框架pytorch介紹 PyTorch是由Facebook創(chuàng)建的開源機器學習框架,其中TensorFlow是完全基于數(shù)據(jù)流圖的。它是一個使用動態(tài)計算圖的框架,允許用戶更靈活地定義和修改模型
    的頭像 發(fā)表于 08-17 16:10 ?1701次閱讀

    tensorflow和pytorch哪個更簡單?

    工業(yè)界廣泛使用、具有豐富生態(tài)系統(tǒng)和跨平臺支持的框架,TensorFlow可能更適合您。以下是tensorflow和pytorch介紹: TensorFlow和PyTorch的基本概念
    的頭像 發(fā)表于 07-05 09:45 ?775次閱讀