AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

PyTorch中使用回調(diào)和日志記錄來監(jiān)控模型訓練?

來源: 責編: 時間:2024-09-10 09:50:26 126觀看
導讀就像船長依賴儀器來保持航向一樣,數(shù)據(jù)科學家需要回調(diào)和日志記錄系統(tǒng)來監(jiān)控和指導他們在PyTorch中的模型訓練。在本教程中,我們將指導您實現(xiàn)回調(diào)和日志記錄功能,以成功訓練模型。理解回調(diào)和日志記錄回調(diào)和日志記錄是PyTor

就像船長依賴儀器來保持航向一樣,數(shù)據(jù)科學家需要回調(diào)和日志記錄系統(tǒng)來監(jiān)控和指導他們在PyTorch中的模型訓練。在本教程中,我們將指導您實現(xiàn)回調(diào)和日志記錄功能,以成功訓練模型。JHJ28資訊網(wǎng)——每日最新資訊28at.com

JHJ28資訊網(wǎng)——每日最新資訊28at.com

理解回調(diào)和日志記錄

回調(diào)和日志記錄是PyTorch中有效管理和監(jiān)控機器學習模型訓練過程的基本工具。JHJ28資訊網(wǎng)——每日最新資訊28at.com

1.回調(diào)

在編程中,回調(diào)是一個作為參數(shù)傳遞給另一個函數(shù)的函數(shù)。這允許回調(diào)函數(shù)在調(diào)用函數(shù)的特定點執(zhí)行。在PyTorch中,回調(diào)用于在訓練循環(huán)的指定階段執(zhí)行操作,例如一個時期的結(jié)束或處理一個批次之后。這些階段可以是:JHJ28資訊網(wǎng)——每日最新資訊28at.com

  • 時期結(jié)束:當整個訓練時期(對整個數(shù)據(jù)集的迭代)完成時。
  • 批次結(jié)束:在一個時期內(nèi)處理單個數(shù)據(jù)批次之后。
  • 其他階段:根據(jù)特定回調(diào)的實現(xiàn),它也可能在其他點觸發(fā)。

回調(diào)執(zhí)行的常見操作包括:JHJ28資訊網(wǎng)——每日最新資訊28at.com

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

2.回調(diào)的好處

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

3.日志記錄

日志記錄是指記錄軟件執(zhí)行過程中發(fā)生的事件。PyTorch日志記錄對于監(jiān)控各種指標至關重要,以理解模型隨時間的性能。存儲訓練指標,如:JHJ28資訊網(wǎng)——每日最新資訊28at.com

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

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

日志記錄提供了模型訓練歷程的歷史記錄。它允許您:JHJ28資訊網(wǎng)——每日最新資訊28at.com

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

在PyTorch中實現(xiàn)回調(diào)和日志記錄

讓我們逐步了解如何在PyTorch中實現(xiàn)一個簡單的回調(diào)和日志記錄系統(tǒng)。JHJ28資訊網(wǎng)——每日最新資訊28at.com

步驟1:定義一個回調(diào)類

首先,我們定義一個回調(diào)類,它將在每個時期的結(jié)束時打印一條消息。JHJ28資訊網(wǎng)——每日最新資訊28at.com

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

步驟2:修改訓練循環(huán)

接下來,我們修改訓練循環(huán)以接受我們的回調(diào),并在每個時期的結(jié)束時調(diào)用它。JHJ28資訊網(wǎng)——每日最新資訊28at.com

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:實現(xiàn)日志記錄

對于日志記錄,我們將使用Python內(nèi)置的日志模塊來記錄訓練進度。JHJ28資訊網(wǎng)——每日最新資訊28at.com

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

步驟4:將所有內(nèi)容整合在一起

最后,我們創(chuàng)建我們的回調(diào)實例,設置記錄器,并開始訓練過程。JHJ28資訊網(wǎng)——每日最新資訊28at.com

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

在PyTorch中實現(xiàn)回調(diào)和日志記錄

示例1:合成數(shù)據(jù)集

讓我們創(chuàng)建一個代表我們機器人繪畫的隨機數(shù)字的簡單數(shù)據(jù)集。我們將使用PyTorch創(chuàng)建隨機數(shù)據(jù)點。JHJ28資訊網(wǎng)——每日最新資訊28at.com

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

步驟1:定義一個簡單模型JHJ28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在,我們將定義一個簡單的模型,嘗試學習對繪畫進行分類。JHJ28資訊網(wǎng)——每日最新資訊28at.com

from torch import nn# A simple neural network with one layerclass 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:設置訓練JHJ28資訊網(wǎng)——每日最新資訊28at.com

我們將準備訓練模型所需的一切。JHJ28資訊網(wǎng)——每日最新資訊28at.com

# Loss function and optimizercriterion = nn.CrossEntropyLoss()optimizer = torch.optim.SGD(model.parameters(), lr=0.1)# DataLoader to handle our datasetfrom torch.utils.data import TensorDataset, DataLoaderdataset = TensorDataset(data, labels)dataloader = DataLoader(dataset, batch_size=10)

步驟3:實現(xiàn)一個回調(diào)JHJ28資訊網(wǎng)——每日最新資訊28at.com

我們將創(chuàng)建一個回調(diào),它在每個時期后打印損失。JHJ28資訊網(wǎng)——每日最新資訊28at.com

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

步驟4:使用回調(diào)訓練JHJ28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在,我們將訓練模型并使用我們的回調(diào)。JHJ28資訊網(wǎng)——每日最新資訊28at.com

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 callbackprint_loss_callback = PrintLossCallback()# Start trainingtrain(model, dataloader, criterion, optimizer, epochs=5, callback=print_loss_callback)

輸出:JHJ28資訊網(wǎng)——每日最新資訊28at.com

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

步驟5:可視化訓練JHJ28資訊網(wǎng)——每日最新資訊28at.com

我們可以繪制隨時間變化的損失,以可視化我們機器人的進步。JHJ28資訊網(wǎng)——每日最新資訊28at.com

import matplotlib.pyplot as pltlosses = []  # Store the losses hereclass 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 callbackplot_loss_callback = PlotLossCallback()train(model, dataloader, criterion, optimizer, epochs=5, callback=plot_loss_callback)

輸出:JHJ28資訊網(wǎng)——每日最新資訊28at.com

JHJ28資訊網(wǎng)——每日最新資訊28at.com

JHJ28資訊網(wǎng)——每日最新資訊28at.com

示例2:公共數(shù)據(jù)集

對于第二個示例,我們將使用在線可用的真實數(shù)據(jù)集。我們將直接使用URL加載著名的鳶尾花數(shù)據(jù)集。JHJ28資訊網(wǎng)——每日最新資訊28at.com

步驟1:加載數(shù)據(jù)集JHJ28資訊網(wǎng)——每日最新資訊28at.com

我們將使用pandas從URL加載數(shù)據(jù)集。JHJ28資訊網(wǎng)——每日最新資訊28at.com

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

步驟2:預處理數(shù)據(jù)JHJ28資訊網(wǎng)——每日最新資訊28at.com

我們需要將數(shù)據(jù)轉(zhuǎn)換為PyTorch可以理解的格式。JHJ28資訊網(wǎng)——每日最新資訊28at.com

from sklearn.preprocessing import LabelEncoderfrom sklearn.model_selection import train_test_split# Encode the labelsencoder = LabelEncoder()iris_labels = encoder.fit_transform(iris_data[4])# Split the datatrain_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 tensorstrain_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 DataLoaderstrain_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:為鳶尾花數(shù)據(jù)集定義一個模型JHJ28資訊網(wǎng)——每日最新資訊28at.com

我們將為鳶尾花數(shù)據(jù)集創(chuàng)建一個合適的模型。JHJ28資訊網(wǎng)——每日最新資訊28at.com

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:訓練模型JHJ28資訊網(wǎng)——每日最新資訊28at.com

我們將按照之前的步驟訓練這個模型。JHJ28資訊網(wǎng)——每日最新資訊28at.com

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

輸出:JHJ28資訊網(wǎng)——每日最新資訊28at.com

JHJ28資訊網(wǎng)——每日最新資訊28at.com

步驟5:評估模型JHJ28資訊網(wǎng)——每日最新資訊28at.com

最后,我們將檢查我們的模型在測試數(shù)據(jù)上的表現(xiàn)如何。JHJ28資訊網(wǎng)——每日最新資訊28at.com

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)

輸出:JHJ28資訊網(wǎng)——每日最新資訊28at.com

Accuracy: 0.3333

結(jié)論

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

本文鏈接:http://www.tebozhan.com/showinfo-26-112766-0.htmlPyTorch中使用回調(diào)和日志記錄來監(jiān)控模型訓練?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 玩轉(zhuǎn)文件權(quán)限:Python 的七個權(quán)限操作實戰(zhàn)

下一篇: Cookie的secure屬性引起循環(huán)登錄問題分析及解決方案

標簽:
  • 熱門焦點
  • 小米平板5 Pro 12.4簡評:多專多能 兼顧影音娛樂的大屏利器

    疫情帶來了網(wǎng)課,網(wǎng)課盤活了安卓平板,安卓平板市場雖然中途停滯了幾年,但好的一點就是停滯的這幾年行業(yè)又有了新的發(fā)展方向,例如超窄邊框、高刷新率、多攝鏡頭組合等,這就讓安卓
  • 一年經(jīng)驗在二線城市面試后端的經(jīng)驗分享

    忠告這篇文章只適合2年內(nèi)工作經(jīng)驗、甚至沒有工作經(jīng)驗的朋友閱讀。如果你是2年以上工作經(jīng)驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內(nèi)容來自 「升職加薪」星球星友 的投稿,坐
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數(shù)中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態(tài)LT(ID:LingTai_LT)如何成為一家偉大企業(yè)?答案一定是對“勢”的把握,這其中最關鍵的當屬對企業(yè)戰(zhàn)略的制定,且能夠站在未來看現(xiàn)在,即使這其中的
  • 花7萬退貨退款無門:誰在縱容淘寶珠寶商家造假?

    來源:極點商業(yè)作者:楊銘在淘寶購買珠寶玉石后,因為保證金不夠賠付,店鋪關閉,退貨退款難、維權(quán)無門的比比皆是。“提供相關產(chǎn)品鑒定證書,支持全國復檢,可以30天無理由退換貨。&
  • 機構(gòu)稱Q2國內(nèi)智能手機銷量同比下滑4% vivo份額重回第1

    7月29日消息,根據(jù)市場調(diào)查機構(gòu)Counterpoint Research公布的最新報告,2023年第2季度中國智能手機銷量同比下降4%,創(chuàng)新自2014年以來第2季度銷量新低。報
  • 英特爾Xe-HP項目終止,將專注Xe-HPC/HPG系列顯卡

    據(jù)10 月 31 日消息報道,英特爾高級副總裁兼加速計算系統(tǒng)和圖形事業(yè)部總經(jīng)理 表示,Xe-HP“ Arctic Sound” 系列服務器 GPU 已經(jīng)應用于 oneAPI devcloud 云服
  • 聯(lián)想的ThinkBook Plus下一版曝光,鍵盤旁邊塞個平板

    ThinkBook Plus 是聯(lián)想的一個特殊筆記本類別,它在封面放入了一塊墨水屏,也給人留下了較為深刻的印象。據(jù)有人爆料,聯(lián)想的下一款 ThinkBook Plus 可能更特殊,它
  • 微軟發(fā)布Windows 11新版 引入全新任務欄狀態(tài)

    近日,微軟發(fā)布了Windows 11新版,而Build 22563更新主要引入了幾周前曝光的平板模式任務欄等,系統(tǒng)更流暢了。更新中,Windows 11加入了專門針對平板優(yōu)化的任務欄
Top