iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
Python

進擊的Python系列 第 32

Day29-PyTorch(妮法)

  • 分享至 

  • xImage
  •  

大家好!我是妮法~我分享PyTorch

https://ithelp.ithome.com.tw/upload/images/20240828/20163257K4OOshy8Se.png
圖片來源:(https://shingekinokyojin.fandom.com/zh/wiki/%E5%A6%AE%E6%B3%95)

https://ithelp.ithome.com.tw/upload/images/20240828/20163257pkF4Vie1us.png
圖片來源:(https://zh-yue.m.wikipedia.org/wiki/File:PyTorch_logo_black.svg)

PyTorch

是一個Torch的Python開源機器學習庫,廣泛應用自然語言處理等等。由Facebook人工智慧研究團隊開發,不僅能夠實現強大GPU加速,同時還支持動態神經網路,這點是許多主流框架TensorFlow所不支援的

PyTorch優勢

  • Python-first:設計以Python為中心,使用起來非常直觀,與其他Python庫整合性非常好
  • 動態圖:採用動態圖機制,可以隨時修改網路結構,這對於研究和快速原型開發非常有幫助
  • 強大社區:擁有活躍的社群,提供豐富的資源和支援
  • 高效GPU加速:能夠充分利用GPU計算能力,加速模型訓練

PyTorch基本概念

  • 張量(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連接多個層

  • 定義損失函數和優化器:選擇適合任務的損失函數和優化器

  • 訓練模型

    • 前向傳播:計算模型的輸出
    • 計算損失:計算預測值與真實值之間的差異
    • 後向傳播:計算梯度
    • 更新參數:根據梯度更新模型參數

PyTorch應用場景

  • 電腦視覺:圖像分類、目標檢測、圖像生成
  • 自然語言處理:文本分類、機器翻譯、問答系統
  • 強化學習:遊戲AI、機器人控制

PyTorch主要功能

  • 靈活的圖計算:使用動態圖計算來構建神經網路,允許開發人員在訓練過程中進行更精細控制
  • 強大優化器:提供一系列優化器,幫助開發人員更有效訓練神經網路
  • 豐富的庫和工具:提供大量庫和工具,幫助開發人員快速構建和部署 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 加速功能,使深度學習模型開發、訓練和部署變得更加高效。在學術界和工業界都得到廣泛應用。因此成為許多深度學習研究者和工程師的首選也受到開發者的青睞

https://ithelp.ithome.com.tw/upload/images/20240912/201632570XtWlitah2.jpg
https://ithelp.ithome.com.tw/upload/images/20240912/20163257pwP2Z4wpKu.jpg
https://ithelp.ithome.com.tw/upload/images/20240912/20163257uAPRLMcMTd.jpg
圖片來源:YouTube

資料來源:PyTorch官方網站


上一篇
Day28-Tensorflow(莫布里特)
下一篇
Day30-Keras(法蘭)
系列文
進擊的Python36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言