成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PyTorch中使用回調和日志記錄來監控模型訓練?

開發
本文提供了適合初學者的代碼示例和解釋,讓您基本掌握 PyTorch 中的回調和日志記錄。

就像船長依賴儀器來保持航向一樣,數據科學家需要回調和日志記錄系統來監控和指導他們在PyTorch中的模型訓練。在本教程中,我們將指導您實現回調和日志記錄功能,以成功訓練模型。

理解回調和日志記錄

回調和日志記錄是PyTorch中有效管理和監控機器學習模型訓練過程的基本工具。

1.回調

在編程中,回調是一個作為參數傳遞給另一個函數的函數。這允許回調函數在調用函數的特定點執行。在PyTorch中,回調用于在訓練循環的指定階段執行操作,例如一個時期的結束或處理一個批次之后。這些階段可以是:

  • 時期結束:當整個訓練時期(對整個數據集的迭代)完成時。
  • 批次結束:在一個時期內處理單個數據批次之后。
  • 其他階段:根據特定回調的實現,它也可能在其他點觸發。

回調執行的常見操作包括:

  • 監控:打印訓練指標,如損失和準確率。
  • 早停:如果模型性能停滯或惡化,則停止訓練。
  • 保存檢查點:定期保存模型的狀態,以便可能的恢復或回滾。
  • 觸發自定義邏輯:根據訓練進度執行任何用戶定義的代碼。

2.回調的好處

  • 模塊化設計:回調通過將特定功能與核心訓練循環分開封裝,促進模塊化。這提高了代碼組織和可重用性。
  • 靈活性:您可以輕松創建自定義回調以滿足特殊需求,而無需修改核心訓練邏輯。
  • 定制化:回調允許您根據特定要求和監控偏好定制訓練過程。

3.日志記錄

日志記錄是指記錄軟件執行過程中發生的事件。PyTorch日志記錄對于監控各種指標至關重要,以理解模型隨時間的性能。存儲訓練指標,如:

  • 損失值
  • 準確率分數
  • 學習率
  • 其他相關的訓練參數

4.為什么日志記錄很重要?

日志記錄提供了模型訓練歷程的歷史記錄。它允許您:

  • 可視化進度:您可以繪制隨時間記錄的指標,以分析損失、準確率或其他參數的趨勢。
  • 比較實驗:通過比較不同訓練運行的日志,您可以評估超參數調整或模型變化的影響。
  • 調試訓練問題:日志記錄有助于識別訓練期間的潛在問題,如突然的性能下降或意外的指標值。

在PyTorch中實現回調和日志記錄

讓我們逐步了解如何在PyTorch中實現一個簡單的回調和日志記錄系統。

步驟1:定義一個回調類

首先,我們定義一個回調類,它將在每個時期的結束時打印一條消息。

class PrintCallback:
    def on_epoch_end(self, epoch, logs):
        print(f"Epoch {epoch}: loss = {logs['loss']:.4f}, accuracy = {logs['accuracy']:.4f}")

步驟2:修改訓練循環

接下來,我們修改訓練循環以接受我們的回調,并在每個時期的結束時調用它。

def train_model(model, dataloader, criterion, optimizer, epochs, callbacks):
    for epoch in range(epochs):
        for batch in dataloader:
            # Training process happens here
            pass
        logs = {'loss': 0.001, 'accuracy': 0.999}  # Example metrics after an epoch
        for callback in callbacks:
            callback.on_epoch_end(epoch, logs)

步驟3:實現日志記錄

對于日志記錄,我們將使用Python內置的日志模塊來記錄訓練進度。

import logging
logging.basicConfig(level=logging.INFO)

def log_metrics(epoch, logs):
    logging.info(f"Epoch {epoch}: loss = {logs['loss']:.4f}, accuracy = {logs['accuracy']:.4f}")

步驟4:將所有內容整合在一起

最后,我們創建我們的回調實例,設置記錄器,并開始訓練過程。

print_callback = PrintCallback()
train_model(model, dataloader, criterion, optimizer, epochs=10, callbacks=[print_callback])

在PyTorch中實現回調和日志記錄

示例1:合成數據集

讓我們創建一個代表我們機器人繪畫的隨機數字的簡單數據集。我們將使用PyTorch創建隨機數據點。

import torch

# Generate random data points
data = torch.rand(100, 3)  # 100 paintings, 3 colors each
labels = torch.randint(0, 2, (100,))  # Randomly label them as good (1) or bad (0)

步驟1:定義一個簡單模型

現在,我們將定義一個簡單的模型,嘗試學習對繪畫進行分類。

from torch import nn

# A simple neural network with one layer
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.layer = nn.Linear(3, 2)
    def forward(self, x):
        return self.layer(x)
model = SimpleModel()

步驟2:設置訓練

我們將準備訓練模型所需的一切。


# Loss function and optimizer
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

# DataLoader to handle our dataset
from torch.utils.data import TensorDataset, DataLoader
dataset = TensorDataset(data, labels)
dataloader = DataLoader(dataset, batch_size=10)

步驟3:實現一個回調

我們將創建一個回調,它在每個時期后打印損失。

class PrintLossCallback:
    def on_epoch_end(self, epoch, loss):
        print(f"Epoch {epoch}: loss = {loss:.4f}")

步驟4:使用回調訓練

現在,我們將訓練模型并使用我們的回調。

def train(model, dataloader, criterion, optimizer, epochs, callback):
    for epoch in range(epochs):
        total_loss = 0
        for inputs, targets in dataloader:
            optimizer.zero_grad()
            outputs = model(inputs)
            loss = criterion(outputs, targets)
            loss.backward()
            optimizer.step()
            total_loss += loss.item()
        callback.on_epoch_end(epoch, total_loss / len(dataloader))

# Create an instance of our callback
print_loss_callback = PrintLossCallback()
# Start training
train(model, dataloader, criterion, optimizer, epochs=5, callback=print_loss_callback)

輸出:

Epoch 0: loss = 0.6927
Epoch 1: loss = 0.6909
Epoch 2: loss = 0.6899
Epoch 3: loss = 0.6891
Epoch 4: loss = 0.6885

步驟5:可視化訓練

我們可以繪制隨時間變化的損失,以可視化我們機器人的進步。

import matplotlib.pyplot as plt

losses = []  # Store the losses here
class PlotLossCallback:
    def on_epoch_end(self, epoch, loss):
        losses.append(loss)
        plt.plot(losses)
        plt.xlabel('Epoch')
        plt.ylabel('Loss')
        plt.show()
# Update our training function to use the plotting callback
plot_loss_callback = PlotLossCallback()
train(model, dataloader, criterion, optimizer, epochs=5, callback=plot_loss_callback)

輸出:

示例2:公共數據集

對于第二個示例,我們將使用在線可用的真實數據集。我們將直接使用URL加載著名的鳶尾花數據集。

步驟1:加載數據集

我們將使用pandas從URL加載數據集。

import pandas as pd

# Load the Iris dataset
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
iris_data = pd.read_csv(url, header=None)

步驟2:預處理數據

我們需要將數據轉換為PyTorch可以理解的格式。

from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split

# Encode the labels
encoder = LabelEncoder()
iris_labels = encoder.fit_transform(iris_data[4])
# Split the data
train_data, test_data, train_labels, test_labels = train_test_split(
    iris_data.iloc[:, :4].values, iris_labels, test_size=0.2, random_state=42
)
# Convert to PyTorch tensors
train_data = torch.tensor(train_data, dtype=torch.float32)
test_data = torch.tensor(test_data, dtype=torch.float32)
train_labels = torch.tensor(train_labels, dtype=torch.long)
test_labels = torch.tensor(test_labels, dtype=torch.long)
# Create DataLoaders
train_dataset = TensorDataset(train_data, train_labels)
test_dataset = TensorDataset(test_data, test_labels)
train_loader = DataLoader(train_dataset, batch_size=10)
test_loader = DataLoader(test_dataset, batch_size=10)

步驟3:為鳶尾花數據集定義一個模型

我們將為鳶尾花數據集創建一個合適的模型。

class IrisModel(nn.Module):
    def __init__(self):
        super(IrisModel, self).__init__()
        self.layer1 = nn.Linear(4, 10)
        self.layer2 = nn.Linear(10, 3)
    def forward(self, x):
        x = torch.relu(self.layer1(x))
        return self.layer2(x)
iris_model = IrisModel()

步驟4:訓練模型

我們將按照之前的步驟訓練這個模型。

# Assume the same training function and callbacks as before
train(iris_model, train_loader, criterion, optimizer, epochs=5, callback=plot_loss_callback)

輸出:

步驟5:評估模型

最后,我們將檢查我們的模型在測試數據上的表現如何。

def evaluate(model, test_loader):
    model.eval()  # Set the model to evaluation mode
    correct = 0
    with torch.no_grad():  # No need to track gradients
        for inputs, targets in test_loader:
            outputs = model(inputs)
            _, predicted = torch.max(outputs, 1)
            correct += (predicted == targets).sum().item()
    accuracy = correct / len(test_loader.dataset)
    print(f"Accuracy: {accuracy:.4f}")

evaluate(iris_model, test_loader)

輸出:

Accuracy: 0.3333

結論

您可以通過設置回調和日志記錄來進行必要的調整,獲得對模型訓練過程的洞察,并確保其高效學習。請記住,如果您的模型提供明確反饋,您通往訓練有素的機器學習模型的道路將更加順利。本文提供了適合初學者的代碼示例和解釋,讓您基本掌握PyTorch中的回調和日志記錄。不要猶豫嘗試提供的代碼。記住,實踐是掌握這些主題的關鍵。

責任編輯:趙寧寧 來源: 小白玩轉Python
相關推薦

2024-07-22 11:14:36

2015-09-01 10:32:11

2015-09-01 14:29:33

2014-12-22 09:51:06

Linuxlogwatch

2022-02-08 17:07:54

Spring BooSpring Aop日志記錄

2021-03-25 15:19:33

深度學習Pytorch技巧

2024-07-25 08:25:35

2020-09-08 08:44:36

日志記錄基礎設施安全漏洞

2023-06-15 15:45:42

自然語言語言模型

2021-03-01 23:26:41

日志Spring BootAOP

2011-07-29 11:10:56

IOS SimpleLogg 日志

2021-08-25 17:03:09

模型人工智能PyTorch

2024-08-26 15:17:16

2020-10-27 09:37:43

PyTorchTensorFlow機器學習

2023-12-29 14:13:41

PyTorch模型開發

2024-04-26 13:02:29

Linuxinotifywai

2020-11-20 10:40:20

PyTorch神經網絡代碼

2024-01-10 16:01:28

2024-01-07 20:20:46

2024-11-19 13:17:38

視覺語言模型Pytorch人工智能
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜精品久久久久久 | 精品国产99| 麻豆一区二区三区 | 色婷婷亚洲国产女人的天堂 | 精品一区二区三区在线视频 | 日韩精品在线一区 | 一区二区在线看 | 亚洲精品国产a久久久久久 午夜影院网站 | 亚洲欧洲成人av每日更新 | 国产91av视频在线观看 | 成人免费一区二区三区视频网站 | 欧美日韩大片 | 亚洲国产精品suv | 午夜欧美一区二区三区在线播放 | 成人三级在线播放 | 精品在线一区 | 久久久久国产一区二区三区 | 在线观看av免费 | 成人自拍av | 日本三级电影免费观看 | 亚洲精品二区 | 一区观看 | 精品欧美一区二区三区精品久久 | 91久久久久久久 | 亚洲精品国产精品国自产在线 | 中文字幕在线中文 | 视频在线日韩 | 亚洲欧洲成人 | 99精品一区二区 | 久久久精品影院 | 免费在线观看一区二区三区 | 激情欧美一区二区三区中文字幕 | 欧美一级片在线 | 中文字幕国产 | 欧美一级观看 | 亚洲播放 | 久久99精品久久久水蜜桃 | 一区二区三区久久久 | 亚洲日本中文字幕在线 | 成人精品在线 | 天天射视频|