99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

PyTorch是什么?

2025-06-18 17:18 更新

一、PyTorch 是什么?

PyTorch 是一個基于 Python 的科學計算包,主要面向以下兩類人群:

  1. 作為 NumPy 的替代品,可借助 GPU 的強大性能加速計算。
  2. 作為一個高靈活性且速度飛快的深度學習平臺,助力開發(fā)者高效構建和訓練模型。

二、環(huán)境搭建:開啟深度學習之旅的第一步

在開始學習之前,確保已安裝 torch 和 torchvision。你可以通過以下命令進行安裝:

pip install torch torchvision

三、張量(Tensor)操作:PyTorch 的基石

張量是 PyTorch 中的基本數(shù)據(jù)結構,類似于 NumPy 中的數(shù)組,但能夠在 GPU 上運行,實現(xiàn)加速計算。

創(chuàng)建張量

import torch


## 創(chuàng)建一個未初始化的 2 行 3 列的張量(來自編程獅示例)
x = torch.empty(2, 3)
print("來自編程獅的未初始化張量:\n", x)


## 創(chuàng)建一個全 0 的張量(W3Cschool 提供的方法)
y = torch.zeros(2, 3)
print("\nW3Cschool 提供的全 0 張量:\n", y)


## 創(chuàng)建一個全 1 的張量
z = torch.ones(2, 3)
print("\n全 1 張量:\n", z)


## 根據(jù)給定數(shù)據(jù)創(chuàng)建張量
data = [[1, 2, 3], [4, 5, 6]]  # 編程獅示例數(shù)據(jù)
tensor_from_data = torch.tensor(data)
print("\n基于編程獅示例數(shù)據(jù)創(chuàng)建的張量:\n", tensor_from_data)

張量的基本運算

## 加法運算(編程獅示例)
a = torch.tensor([1, 2, 3])  # 編程獅示例數(shù)據(jù)
b = torch.tensor([4, 5, 6])  # 編程獅示例數(shù)據(jù)
c = a + b
print("\n張量加法結果(編程獅示例):\n", c)


## 減法運算
d = a - b
print("\n張量減法結果:\n", d)


## 乘法運算
e = a * b
print("\n張量乘法結果:\n", e)


## 除法運算
f = a.float() / b.float()  # 需要將張量轉換為浮點型以避免整數(shù)除法
print("\n張量除法結果:\n", f)

張量索引和切片

## 索引操作(W3Cschool 示例)
tensor = torch.tensor([10, 20, 30, 40, 50])  # W3Cschool 示例數(shù)據(jù)
print("\n第一個元素:", tensor[0])  # 輸出第一個元素
print("最后一個元素:", tensor[-1])  # 輸出最后一個元素


## 切片操作
print("\n前兩個元素:", tensor[:2])  # 獲取前兩個元素
print("后兩個元素:", tensor[-2:])  # 獲取后兩個元素

四、自動微分(Autograd):深度學習的幕后英雄

自動微分是深度學習訓練過程中的關鍵功能,PyTorch 的 Autograd 模塊能自動計算張量操作的梯度。

創(chuàng)建需要梯度計算的張量

## 創(chuàng)建一個需要梯度計算的張量(編程獅示例)
x = torch.tensor([2.0], requires_grad=True)
print("\n創(chuàng)建的張量:\n", x)

構建計算圖并計算梯度

## 構建計算圖(W3Cschool 示例)
y = x ** 2  # W3Cschool 示例操作
z = y * 3  # W3Cschool 示例操作


## 計算梯度
z.backward()  # 反向傳播計算梯度


## 查看梯度
print("\nx 的梯度:\n", x.grad)

五、神經(jīng)網(wǎng)絡構建:釋放深度學習的潛力

PyTorch 提供了豐富的神經(jīng)網(wǎng)絡模塊,方便構建各種類型的神經(jīng)網(wǎng)絡。

定義神經(jīng)網(wǎng)絡類

import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # 定義一個全連接層,輸入大小為 3,輸出大小為 5(編程獅示例參數(shù))
        self.fc1 = nn.Linear(3, 5)


    def forward(self, x):
        # 前向傳播過程
        x = self.fc1(x)
        return x


## 創(chuàng)建神經(jīng)網(wǎng)絡實例(編程獅示例)
net = Net()
print("\n創(chuàng)建的神經(jīng)網(wǎng)絡:\n", net)

六、訓練分類器:實戰(zhàn)深度學習

以一個簡單的圖像分類任務為例,介紹如何使用 PyTorch 訓練分類器。

準備數(shù)據(jù)集(以編程獅圖像數(shù)據(jù)集為例)

## 加載編程獅圖像數(shù)據(jù)集(此處僅為示例,實際需要根據(jù)具體數(shù)據(jù)集進行處理)
from torch.utils.data import DataLoader, TensorDataset


## 創(chuàng)建示例數(shù)據(jù)(模擬編程獅圖像數(shù)據(jù)集)
features = torch.randn(100, 3)  # 100 個樣本,每個樣本有 3 個特征(編程獅示例特征維度)
labels = torch.randint(0, 2, (100,))  # 二分類標簽


## 創(chuàng)建數(shù)據(jù)集和數(shù)據(jù)加載器
dataset = TensorDataset(features, labels)
data_loader = DataLoader(dataset, batch_size=10, shuffle=True)

定義損失函數(shù)和優(yōu)化器

## 定義損失函數(shù)和優(yōu)化器(W3Cschool 推薦方法)
criterion = nn.CrossEntropyLoss()  # 使用交叉熵損失函數(shù)
optimizer = torch.optim.SGD(net.parameters(), lr=0.01)  # 使用隨機梯度下降優(yōu)化器

訓練過程

## 訓練模型(編程獅示例訓練流程)
for epoch in range(10):  # 進行 10 個輪次的訓練
    for data in data_loader:
        inputs, targets = data


        # 前向傳播
        outputs = net(inputs)
        loss = criterion(outputs, targets)


        # 反向傳播和優(yōu)化
        optimizer.zero_grad()  # 清空梯度
        loss.backward()  # 反向傳播計算梯度
        optimizer.step()  # 更新模型參數(shù)


    print(f"Epoch {epoch+1}, Loss: {loss.item()}")

七、數(shù)據(jù)并行處理(可選):加速深度學習訓練

在處理大規(guī)模數(shù)據(jù)時,可以利用數(shù)據(jù)并行技術加速訓練過程。

## 使用數(shù)據(jù)并行(W3Cschool 推薦方法)
if torch.cuda.device_count() > 1:
    print(f"\n使用 {torch.cuda.device_count()} 個 GPU 進行訓練")
    net = nn.DataParallel(net)


## 將模型和數(shù)據(jù)移動到 GPU 上(如果有 GPU)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
net.to(device)
features = features.to(device)
labels = labels.to(device)
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號