圖片來源:(https://shingekinokyojin.fandom.com/zh/wiki/%E5%A6%AE%E6%B3%95)
圖片來源:(https://zh-yue.m.wikipedia.org/wiki/File:PyTorch_logo_black.svg)
是一個Torch的Python開源機器學習庫,廣泛應用自然語言處理等等。由Facebook人工智慧研究團隊開發,不僅能夠實現強大GPU加速,同時還支持動態神經網路,這點是許多主流框架TensorFlow所不支援的
Python-first
:設計以Python為中心,使用起來非常直觀,與其他Python庫整合性非常好動態圖
:採用動態圖機制,可以隨時修改網路結構,這對於研究和快速原型開發非常有幫助強大社區
:擁有活躍的社群,提供豐富的資源和支援高效GPU加速
:能夠充分利用GPU計算能力,加速模型訓練張量(Tensor)
:PyTorch核心數據結構,類似NumPy的ndarray,但能夠在 GPU 上運算自動微分(Autograd)
:PyTorch自動微分系統能自動計算梯度,簡化反向傳播過程神經網路模組(nn)
:PyTorch提供豐富的神經網路模組,例如:卷積層、循環層優化器(optim)
:PyTorch提供各種優化器,例如:SGD、Adam,更新模型參數import torch
import torch.nn as nn
import torch.optim as optim
# 建立一個簡單的神經網路
model = nn.Sequential(
nn.Linear(10, 5),
nn.ReLU(),
nn.Linear(5, 1)
)
# 定義損失函數和優化器
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 訓練模型
for epoch in range(100):
# 前向傳播
outputs = model(inputs)
loss = criterion(outputs, labels)
# 後向傳播
optimizer.zero_grad()
loss.backward()
# 更新參數
optimizer.step()
導入模組
:導入PyTorch核心模組
建立模型
:使用nn.Sequential連接多個層
定義損失函數和優化器
:選擇適合任務的損失函數和優化器
訓練模型
前向傳播
:計算模型的輸出計算損失
:計算預測值與真實值之間的差異後向傳播
:計算梯度更新參數
:根據梯度更新模型參數電腦視覺
:圖像分類、目標檢測、圖像生成自然語言處理
:文本分類、機器翻譯、問答系統強化學習
:遊戲AI、機器人控制靈活的圖計算
:使用動態圖計算來構建神經網路,允許開發人員在訓練過程中進行更精細控制強大優化器
:提供一系列優化器,幫助開發人員更有效訓練神經網路豐富的庫和工具
:提供大量庫和工具,幫助開發人員快速構建和部署 AI 和 ML 應用程式PyTorch程式碼風格類似Python 的 NumPy 庫,使 Python 開發人員可以輕鬆上手
利用 PyTorch 程序,對 MNIST 數據集進行圖像分類
import torch
import torchvision
# 載入 MNIST 數據集
train_dataset = torchvision.datasets.MNIST(
root="~/data",
train=True,
download=True,
transform=torchvision.transforms.ToTensor(),
)
test_dataset = torchvision.datasets.MNIST(
root="~/data",
train=False,
download=True,
transform=torchvision.transforms.ToTensor(),
)
# 構建模型
model = torch.nn.Sequential(
torch.nn.Flatten(),
torch.nn.Linear(784, 10),
)
# 定義損失函數和優化器
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# 訓練模型
for epoch in range(10):
for batch_idx, (data, target) in enumerate(train_dataset):
# 計算輸出
output = model(data)
# 計算損失
loss = criterion(output, target)
# 反向傳播
optimizer.zero_grad()
loss.backward()
# 更新參數
optimizer.step()
# 評估模型
test_loss = 0
correct = 0
with torch.no_grad():
for data, target in enumerate(test_dataset):
output = model(data)
test_loss += criterion(output, target).item()
pred = output.argmax(dim=1, keepdim=True)
correct += pred.eq(target.view_as(pred)).sum().item()
print(f"Test loss: {test_loss / len(test_dataset)}")
print(f"Accuracy: {correct / len(test_dataset)}")
將訓練一個簡單的神經網絡來分類 MNIST 數據集中的圖像
神經網絡由兩個層組成:一個輸入層和一個輸出層
輸入層有 784 個節點,每個節點代表一個像素
輸出層有 10 個節點,每個節點代表一個類別
程序將使用隨機梯度下降 (SGD) 優化器來訓練模型
SGD 優化器將迭代更新模型的參數,以減少損失函數的值
程序將在 MNIST 測試數據集上評估模型的性能
測試數據集包含 10,000 個圖像
加速人工智慧 (AI) 和機器學習 (ML) 應用程式的開發和研究
它基於 Python 編程語言,並使用動態圖計算來構建和訓練神經網路
import torch
# 定義訓練資料
x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32)
y = torch.tensor([5, 7], dtype=torch.float32)
# 定義模型
model = torch.nn.Linear(2, 1)
# 定義損失函數
loss_fn = torch.nn.MSELoss()
# 定義優化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# 訓練模型
for epoch in range(1000):
# 前向傳播
outputs = model(x)
# 計算損失
loss = loss_fn(outputs, y)
# 反向傳播
optimizer.zero_grad()
loss.backward()
# 更新模型參數
optimizer.step()
# 評估模型
print(model(x))
輸出:
tensor([5.0000, 6.9999], dtype=torch.float32)
PyTorch 作為一個功能強大、靈活、直觀設計,結合了 Python 的易用性與強大的 GPU 加速功能,使深度學習模型開發、訓練和部署變得更加高效。在學術界和工業界都得到廣泛應用。因此成為許多深度學習研究者和工程師的首選也受到開發者的青睞
圖片來源:YouTube
資料來源:PyTorch官方網站