自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PyTorch 深度學(xué)習(xí)的十個(gè)核心概念

開發(fā) 深度學(xué)習(xí)
本文介紹了 PyTorch 中的十個(gè)核心概念,通過這些概念的學(xué)習(xí)和實(shí)踐,你可以更好地理解和使用 PyTorch 構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型。

深度學(xué)習(xí)是當(dāng)前最熱門的技術(shù)之一,而 PyTorch 是一個(gè)非常受歡迎的深度學(xué)習(xí)框架。今天,我們將深入探討 PyTorch 中的 10 個(gè)核心概念,幫助你更好地理解和使用這個(gè)強(qiáng)大的工具。

1. 張量(Tensor)

張量是 PyTorch 中最基本的數(shù)據(jù)結(jié)構(gòu),類似于 NumPy 的數(shù)組,但可以在 GPU 上運(yùn)行,從而加速計(jì)算。

import torch

# 創(chuàng)建一個(gè) 2x3 的張量
tensor = torch.tensor([[1, 2, 3], [4, 5, 6]])
print(tensor)

輸出:

tensor([[1, 2, 3],
        [4, 5, 6]])

2. 自動(dòng)求導(dǎo)(Autograd)

自動(dòng)求導(dǎo)是 PyTorch 的一大亮點(diǎn),它允許我們自動(dòng)計(jì)算梯度,從而簡(jiǎn)化了反向傳播的過程。

# 創(chuàng)建一個(gè)需要求導(dǎo)的張量
x = torch.tensor([2.0], requires_grad=True)

# 定義一個(gè)函數(shù) y = x^2
y = x ** 2

# 計(jì)算梯度
y.backward()

# 輸出梯度
print(x.grad)

輸出:

tensor([4.])

3. 動(dòng)態(tài)計(jì)算圖

PyTorch 使用動(dòng)態(tài)計(jì)算圖,這意味著每次前向傳播時(shí)都會(huì)重新構(gòu)建計(jì)算圖,這使得模型更加靈活。

# 動(dòng)態(tài)計(jì)算圖示例
x = torch.tensor([1.0], requires_grad=True)
y = x * 2

for _ in range(3):
    y = y * x

y.backward()
print(x.grad)

輸出:

tensor([16.])

4. 模型定義(nn.Module)

nn.Module 是 PyTorch 中定義模型的基本類。通過繼承 nn.Module,我們可以輕松地構(gòu)建復(fù)雜的神經(jīng)網(wǎng)絡(luò)。

import torch.nn as nn

class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.linear = nn.Linear(1, 1)

    def forward(self, x):
        return self.linear(x)

model = SimpleModel()
print(model)

輸出:

SimpleModel(
  (linear): Linear(in_features=1, out_features=1, bias=True)
)

5. 損失函數(shù)(Loss Function)

損失函數(shù)用于衡量模型預(yù)測(cè)值與真實(shí)值之間的差異。常見的損失函數(shù)包括均方誤差(MSE)和交叉熵?fù)p失(CrossEntropyLoss)。

criterion = nn.MSELoss()

# 假設(shè)的預(yù)測(cè)值和真實(shí)值
y_pred = torch.tensor([1.0])
y_true = torch.tensor([2.0])

loss = criterion(y_pred, y_true)
print(loss)

輸出:

tensor(1.)

6. 優(yōu)化器(Optimizer)

優(yōu)化器用于更新模型參數(shù),以最小化損失函數(shù)。常見的優(yōu)化器包括 SGD(隨機(jī)梯度下降)和 Adam。

optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 清除梯度
optimizer.zero_grad()

# 計(jì)算損失
loss = criterion(model(torch.tensor([1.0])), torch.tensor([2.0]))

# 反向傳播
loss.backward()

# 更新參數(shù)
optimizer.step()

7. 數(shù)據(jù)加載(DataLoader)

DataLoader 用于加載和預(yù)處理數(shù)據(jù),支持批量加載和多線程處理。

from torch.utils.data import DataLoader, TensorDataset

# 創(chuàng)建數(shù)據(jù)集
data = TensorDataset(torch.tensor([[1.0], [2.0], [3.0]]), torch.tensor([[2.0], [4.0], [6.0]]))

# 創(chuàng)建 DataLoader
dataloader = DataLoader(data, batch_size=2, shuffle=True)

# 迭代數(shù)據(jù)
for inputs, targets in dataloader:
    print(inputs, targets)

輸出:

tensor([[2.],
        [1.]]) tensor([[4.],
        [2.]])
tensor([[3.]]) tensor([[6.]])

8. 模型保存與加載

保存和加載模型是非常重要的操作,可以方便地在不同階段恢復(fù)訓(xùn)練或部署模型。

# 保存模型
torch.save(model.state_dict(), 'model.pth')

# 加載模型

9. 轉(zhuǎn)換(Transforms)

轉(zhuǎn)換用于對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,如歸一化、裁剪等。常用的庫(kù)有 torchvision.transforms。

from torchvision import transforms

# 定義轉(zhuǎn)換
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

# 應(yīng)用轉(zhuǎn)換
image = transform(image)

10. GPU 支持

PyTorch 支持 GPU 計(jì)算,可以通過簡(jiǎn)單的 API 將數(shù)據(jù)和模型轉(zhuǎn)移到 GPU 上。

# 檢查是否有可用的 GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 將模型和數(shù)據(jù)轉(zhuǎn)移到 GPU
model.to(device)
inputs = inputs.to(device)
targets = targets.to(device)

# 在 GPU 上進(jìn)行前向傳播
outputs = model(inputs)

實(shí)戰(zhàn)案例:手寫數(shù)字識(shí)別

假設(shè)我們要構(gòu)建一個(gè)簡(jiǎn)單的卷積神經(jīng)網(wǎng)絡(luò)(CNN)來識(shí)別手寫數(shù)字。我們將使用 MNIST 數(shù)據(jù)集進(jìn)行訓(xùn)練和測(cè)試。

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

# 定義模型
class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Conv2d(1, 16, kernel_size=3, stride=1, padding=1)
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)
        self.fc1 = nn.Linear(16 * 14 * 14, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = x.view(-1, 16 * 14 * 14)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# 數(shù)據(jù)預(yù)處理
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

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

train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)

# 初始化模型、損失函數(shù)和優(yōu)化器
model = CNN().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 訓(xùn)練模型
num_epochs = 5
for epoch in range(num_epochs):
    for inputs, labels in train_loader:
        inputs, labels = inputs.to(device), labels.to(device)
        
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

    print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

# 測(cè)試模型
model.eval()
correct = 0
total = 0
with torch.no_grad():
    for inputs, labels in test_loader:
        inputs, labels = inputs.to(device), labels.to(device)
        outputs = model(inputs)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print(f'Accuracy: {100 * correct / total:.2f}%')

總結(jié)

本文介紹了 PyTorch 中的 10 個(gè)核心概念,包括張量、自動(dòng)求導(dǎo)、動(dòng)態(tài)計(jì)算圖、模型定義、損失函數(shù)、優(yōu)化器、數(shù)據(jù)加載、模型保存與加載、轉(zhuǎn)換和 GPU 支持。通過這些概念的學(xué)習(xí)和實(shí)踐,你可以更好地理解和使用 PyTorch 構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型。最后,我們還通過一個(gè)實(shí)戰(zhàn)案例展示了如何使用 PyTorch 構(gòu)建一個(gè)簡(jiǎn)單的卷積神經(jīng)網(wǎng)絡(luò)來識(shí)別手寫數(shù)字。

責(zé)任編輯:趙寧寧 來源: 小白PythonAI編程
相關(guān)推薦

2024-05-17 12:43:49

Python編程開發(fā)

2019-08-29 19:44:17

深度學(xué)習(xí)機(jī)器學(xué)習(xí)人工智能

2021-03-11 09:02:37

SQL數(shù)據(jù)庫(kù)數(shù)據(jù)

2021-08-09 08:00:00

深度學(xué)習(xí)人工智能機(jī)器學(xué)習(xí)

2024-05-21 11:14:20

Python編程

2022-06-12 23:43:19

SQL數(shù)據(jù)函數(shù)

2022-03-22 23:18:55

SQL技術(shù)內(nèi)部概念

2024-05-17 16:18:27

2009-07-03 17:09:01

學(xué)習(xí)Tapestry

2023-12-25 10:53:54

機(jī)器學(xué)習(xí)模型性能

2023-03-02 00:04:59

機(jī)器學(xué)習(xí)系統(tǒng)架構(gòu)

2009-07-16 13:28:14

2023-06-09 10:27:13

Vue開源

2024-11-29 12:00:00

Python機(jī)器學(xué)習(xí)庫(kù)

2011-07-13 18:09:07

編程語言

2022-10-28 15:19:28

機(jī)器學(xué)習(xí)距離度量數(shù)據(jù)集

2011-01-28 15:11:15

PowerShell

2017-07-20 14:03:23

2024-12-03 14:33:42

Python遞歸編程

2009-11-24 14:52:00

CCNP協(xié)議
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)