W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
PyTorch 是一個基于 Python 的科學計算包,主要面向以下兩類人群:
在開始學習之前,確保已安裝 torch 和 torchvision。你可以通過以下命令進行安裝:
pip install torch torchvision
張量是 PyTorch 中的基本數(shù)據(jù)結構,類似于 NumPy 中的數(shù)組,但能夠在 GPU 上運行,實現(xiàn)加速計算。
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:]) # 獲取后兩個元素
自動微分是深度學習訓練過程中的關鍵功能,PyTorch 的 Autograd 模塊能自動計算張量操作的梯度。
## 創(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)
PyTorch 提供了豐富的神經(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)
以一個簡單的圖像分類任務為例,介紹如何使用 PyTorch 訓練分類器。
## 加載編程獅圖像數(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)化器(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()}")
在處理大規(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)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: