色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

PyTorch的介紹與使用案例

CHANBAEK ? 來源:網絡整理 ? 2024-07-10 14:19 ? 次閱讀

PyTorch簡介

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

主要特點

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

安裝

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

pip install torch torchvision

PyTorch的基本使用

張量(Tensor)

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

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

自動微分(Autograd)

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

import torch  
  
# 創建一個張量并設置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的梯度

神經網絡模塊

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

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來訓練一個基本的卷積神經網絡(CNN),用于對CIFAR-10數據集進行分類。CIFAR-10是一個包含60000張32x32彩色圖像的數據集,分為10個類別,每個類別有6000張圖像。

1. 數據加載與預處理

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

import torch  
import torchvision  
import torchvision.transforms as transforms  
  
# 數據預處理  
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. 定義網絡模型

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

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. 損失函數與優化器

選擇適當的損失函數(如交叉熵損失)和優化器(如SGD或Adam)。

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

4. 訓練網絡

訓練網絡通常涉及多個epoch的迭代,每個epoch中遍歷整個數據集一次。

for epoch in range(10):  # 遍歷數據集多次  
  
    running_loss = 0.0  
    for i, data in enumerate(trainloader, 0):  
        # 獲取輸入  
        inputs, labels = data  
  
        # 梯度置零  
        optimizer.zero_grad()  
  
        # 前向 + 反向 + 優化  
        outputs = net(inputs)  
        loss = criterion(outputs, labels)  
        loss.backward()  
        optimizer.step()  
  
        # 打印統計信息  
        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. 測試網絡

在測試集上評估網絡的性能,確保模型在未見過的數據上也能表現良好。

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. 加載模型進行預測

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

net = Net()  
net.load_state_dict(torch.load('cifar_net.pth'))  
  
# 假設你有一個新的圖像輸入  
# 你可以使用相同的transform來處理這個新圖像,然后將其送入網絡進行預測  
  
# 示例:僅用于說明,需要替換為實際的圖像數據  
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()]}')

注意

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

8. 模型評估與驗證

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

# 假設你已經有了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. 超參數調優

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

10. 數據增強

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

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)等方法來實現。

12. 部署模型

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

13. 監控與維護

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

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

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

    關注

    66

    文章

    8406

    瀏覽量

    132558
  • python
    +關注

    關注

    56

    文章

    4792

    瀏覽量

    84627
  • pytorch
    +關注

    關注

    2

    文章

    807

    瀏覽量

    13198
收藏 人收藏

    評論

    相關推薦

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

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

    Pytorch自動求導示例

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

    Pytorch入門之的基本操作

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

    PyTorch如何入門

    PyTorch 入門實戰(一)——Tensor
    發表于 06-01 09:58

    PyTorch10的基礎教程

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

    Pytorch AI語音助手

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

    如何安裝TensorFlow2 Pytorch

    如何安裝TensorFlow2 Pytorch
    發表于 03-07 07:32

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

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

    如何往星光2板子里裝pytorch

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

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

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

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

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

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

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

    基于PyTorch的深度學習入門教程之使用PyTorch構建一個神經網絡

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

    深度學習框架pytorch介紹

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

    tensorflow和pytorch哪個更簡單?

    工業界廣泛使用、具有豐富生態系統和跨平臺支持的框架,TensorFlow可能更適合您。以下是tensorflow和pytorch介紹: TensorFlow和PyTorch的基本概念
    的頭像 發表于 07-05 09:45 ?845次閱讀
    主站蜘蛛池模板: 久久亚洲免费视频| 狠狠色在在线视频观看| 高h gl肉文| 国产精品色吧国产精品| 韩国演艺圈qvod| 老师洗澡让我吃她胸的视频| 女人麻豆国产香蕉久久精品| 日韩少妇爆乳无码专区| 亚洲 日韩 欧美 另类 蜜桃| 一级做a爰片久久免费| 99免费精品| 丰满大爆乳波霸奶| 国产在线高清视频无码| 久久综合老色鬼网站| YELLOW日本免费观看播放| 婷婷激情综合色五月久久竹菊影视| 男男高h浪荡受h| 日韩免费一级毛片| 久久爱狠狠综合网| 富婆大保健嗷嗷叫普通话对白| 亚洲一区在线观看无码欧美| 暖暖 免费 高清 日本视频大全| 国产精品亚洲AV毛片一区二区三区 | 日韩一级精品久久久久| 麻豆文化传媒一区二区| 激情男女高潮射精AV免费| 美女露出撒尿的部位| 色悠久久综合| 在线少女漫画| 免费看午夜高清性色生活片| 三级黄色小视频| 诱人的秘书BD在线观看| 春药按摩人妻中文字幕| 久久精品亚洲AV高清网站性色| 区一区二视频免费观看| 亚洲人美女肛交真人全程| www.x日本| 久久精品国产免费播放| 三级黄视频| 4480YY旧里番在线播放| 国产麻豆精品传媒AV国产在线 |