亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Pytorch結(jié)合PyG實(shí)現(xiàn)MLP過程詳解

 更新時(shí)間:2023年04月21日 09:26:18   作者:實(shí)力  
這篇文章主要為大家介紹了Pytorch結(jié)合PyG實(shí)現(xiàn)MLP過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

導(dǎo)入庫和數(shù)據(jù)

首先,我們需要導(dǎo)入PyTorch和PyG庫,然后準(zhǔn)備好我們的數(shù)據(jù)。例如,我們可以使用以下方式生成一個(gè)簡(jiǎn)單的隨機(jī)數(shù)據(jù)集:

from torch.utils.data import random_split
from torch_geometric.datasets import TUDataset
dataset = TUDataset(root='/tmp/ENZYMES', name='ENZYMES')
train_dataset, test_dataset = random_split(dataset, [len(dataset) - 1000, 1000])

其中,TUDataset 是PyG提供的圖形數(shù)據(jù)集之一。這里我們選擇了 ENZYMES 數(shù)據(jù)集并存儲(chǔ)到 /tmp/ENZYMES 文件夾中。然后我們將該數(shù)據(jù)集分成訓(xùn)練集和測(cè)試集,其中訓(xùn)練集包含所有數(shù)據(jù)減去最后1000個(gè)數(shù)據(jù),測(cè)試集則為最后1000個(gè)數(shù)據(jù)。

定義模型結(jié)構(gòu)

接下來,我們需要定義MLP模型的結(jié)構(gòu)。通過PyTorch和PyG,我們可以自己定義完整的MLP模型或者利用現(xiàn)有的庫函數(shù)快速構(gòu)建模型。在這里,我們將使用 torch.nn.Sequential 函數(shù)逐層堆疊多個(gè)線性層來實(shí)現(xiàn)MLP模型。以下是MLP模型定義的示例代碼:

import torch.nn as nn
from torch_geometric.nn import MLP
class Net(nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels, num_layers=3):
        super(Net, self).__init__()
        self.num_layers = num_layers
        self.mlp = MLP([in_channels] + [hidden_channels] * (num_layers-1) + [out_channels])
    def forward(self, x):
        return self.mlp(x)

上述代碼中,我們定義了一個(gè) Net 類用于構(gòu)建MLP網(wǎng)絡(luò),接收輸入通道數(shù)、隱藏層節(jié)點(diǎn)數(shù)、輸出通道數(shù)以及MLP層數(shù)作為參數(shù)。例如,我們可以按照以下方式創(chuàng)建一個(gè)擁有 4 層、128 個(gè)隱藏節(jié)點(diǎn)、并將度為圖結(jié)構(gòu)作為輸入的MLP模型:

model = Net(in_channels=dataset.num_node_features, hidden_channels=128, out_channels=dataset.num_classes, num_layers=4)

定義訓(xùn)練函數(shù)

然后,我們需要定義訓(xùn)練函數(shù)來訓(xùn)練我們的MLP神經(jīng)網(wǎng)絡(luò)。在這里,我們將使用交叉熵?fù)p失和Adam優(yōu)化器進(jìn)行訓(xùn)練,并在每一個(gè)epoch結(jié)束時(shí)計(jì)算準(zhǔn)確率并打印出來。以下是訓(xùn)練函數(shù)的示例代碼:

import torch.optim as optim
from torch_geometric.data import DataLoader
from tqdm import tqdm
def train(model, loader, optimizer, loss_fn):
    model.train()
    correct = 0
    total_loss = 0
    for data in tqdm(loader, desc='Training'):
        optimizer.zero_grad()
        out = model(data.x)
        pred = out.argmax(dim=1)
        loss = loss_fn(out, data.y)
        loss.backward()
        optimizer.step()
        total_loss += loss.item() * data.num_graphs
        correct += pred.eq(data.y).sum().item()
    return total_loss / len(loader.dataset), correct / len(loader.dataset)

在上述代碼中,我們遍歷加載器中的每個(gè)數(shù)據(jù)批次,并對(duì)模型進(jìn)行培訓(xùn)。對(duì)于每個(gè)圖數(shù)據(jù)批次,我們計(jì)算網(wǎng)絡(luò)輸出、預(yù)測(cè)和損失,然后通過反向傳播來更新權(quán)重。最后,我們將總損失和正確率記錄下來并返回。

定義測(cè)試函數(shù)

接下來,我們還需要定義測(cè)試函數(shù)來測(cè)試我們的MLP神經(jīng)網(wǎng)絡(luò)性能表現(xiàn)。我們將利用與訓(xùn)練函數(shù)相同的輸出參數(shù)進(jìn)行測(cè)試,并打印出最終的測(cè)試準(zhǔn)確率。以下是測(cè)試函數(shù)的示例代碼:

def test(model, loader, loss_fn):
    model.eval()
    correct = 0
    total_loss = 0
    with torch.no_grad():
        for data in tqdm(loader, desc='Testing'):
            out = model(data.x)
            pred = out.argmax(dim=1)
            loss = loss_fn(out, data.y)
            total_loss += loss.item() * data.num_graphs
            correct += pred.eq(data.y).sum().item()
    return total_loss / len(loader.dataset), correct / len(loader.dataset)

在上述代碼中,我們對(duì)測(cè)試數(shù)據(jù)集中的所有數(shù)據(jù)進(jìn)行了循環(huán),并計(jì)算網(wǎng)絡(luò)的輸出和預(yù)測(cè)。我們記錄下總損失和正確分類的數(shù)據(jù)量,并返回?fù)p失和準(zhǔn)確率之間的比率(我們使用該比率而不是精度來反映測(cè)試表現(xiàn)通常較?。?/p>

訓(xùn)練模型并評(píng)估訓(xùn)練結(jié)果

最后,我們可以使用前面定義過的函數(shù)來定義主函數(shù),從而完成MLP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和測(cè)試。以下是主函數(shù)的示例代碼:

if __name__ == '__main__':
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    model = Net(in_channels=dataset.num_node_features, hidden_channels=128, out_channels=dataset.num_classes, num_layers=4).to(device)
    loader = DataLoader(train_dataset, batch_size=128, shuffle=True)
    test_loader = DataLoader(test_dataset, batch_size=128)
    optimizer = optim.Adam(model.parameters(), lr=0.01)
    loss_fn = nn.CrossEntropyLoss()
    for epoch in range(1, 201):
        train_loss, train_acc = train(model, loader, optimizer, loss_fn)
        test_loss, test_acc = test(model, test_loader, loss_fn)
        print(f'Epoch {epoch:03d}, Train Loss: {train_loss:.4f}, Train Acc: {train_acc:.4f}, '
              f'Test Loss: {test_loss:.4f}, Test Acc: {test_acc:.4f}')

通過上述代碼,我們就可以完成MLP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和測(cè)試。我們使用 DataLoader 函數(shù)進(jìn)行數(shù)據(jù)加載,設(shè)置學(xué)習(xí)率、損失函數(shù)、訓(xùn)練輪數(shù)等超參數(shù)。最后,我們可以在屏幕上看到每個(gè)時(shí)代的準(zhǔn)確率和損失值,并通過它們?cè)u(píng)估模型的訓(xùn)練表現(xiàn)。

以上就是Pytorch結(jié)合PyG實(shí)現(xiàn)MLP過程詳解的詳細(xì)內(nèi)容,更多關(guān)于Pytorch PyG實(shí)現(xiàn)MLP的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 實(shí)現(xiàn)一行輸入多個(gè)數(shù)字(用空格隔開)

    Python 實(shí)現(xiàn)一行輸入多個(gè)數(shù)字(用空格隔開)

    這篇文章主要介紹了Python 實(shí)現(xiàn)一行輸入多個(gè)數(shù)字,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • tensorflow基于Anaconda環(huán)境搭建的方法步驟

    tensorflow基于Anaconda環(huán)境搭建的方法步驟

    本文主要介紹了tensorflow基于Anaconda環(huán)境搭建的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • keras的ImageDataGenerator和flow()的用法說明

    keras的ImageDataGenerator和flow()的用法說明

    這篇文章主要介紹了keras的ImageDataGenerator和flow()的用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python如何將list中的string轉(zhuǎn)換為int

    Python如何將list中的string轉(zhuǎn)換為int

    這篇文章主要介紹了Python如何將list中的string轉(zhuǎn)換為int,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python生成隨機(jī)數(shù)詳解流程

    Python生成隨機(jī)數(shù)詳解流程

    生成隨機(jī)數(shù)一般使用的就是random模塊下的函數(shù),生成的隨機(jī)數(shù)并不是真正意義上的隨機(jī)數(shù),而是對(duì)隨機(jī)數(shù)的一種模擬。random模塊包含各種偽隨機(jī)數(shù)生成函數(shù),以及各種根據(jù)概率分布生成隨機(jī)數(shù)的函數(shù)。今天我們的目標(biāo)就是摸清隨機(jī)數(shù)有幾種生成方式
    2022-03-03
  • Python中創(chuàng)建對(duì)象列表的實(shí)現(xiàn)示例

    Python中創(chuàng)建對(duì)象列表的實(shí)現(xiàn)示例

    本文主要介紹了Python中創(chuàng)建對(duì)象列表的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python 如何實(shí)現(xiàn)遺傳算法

    python 如何實(shí)現(xiàn)遺傳算法

    這篇文章主要介紹了python 如何實(shí)現(xiàn)遺傳算法,幫助大家更好的利用python進(jìn)行數(shù)據(jù)分析、處理,感興趣的朋友可以了解下
    2020-09-09
  • python中單例常用的幾種實(shí)現(xiàn)方法總結(jié)

    python中單例常用的幾種實(shí)現(xiàn)方法總結(jié)

    Python 的模塊就是天然的單例模式,下面這篇文章主要給大家介紹了關(guān)于python中單例常用的幾種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python單例具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們一起來看看吧
    2018-10-10
  • Ubuntu安裝Python3.8的兩種方法詳解

    Ubuntu安裝Python3.8的兩種方法詳解

    這篇文章主要給大家介紹了關(guān)于Ubuntu安裝Python3.8的兩種方法,在Ubuntu上安裝Python非常簡(jiǎn)單,文中介紹了兩種方法,每種方法都給出了詳細(xì)實(shí)例,需要的朋友可以參考下
    2023-09-09
  • 詳解Selenium+PhantomJS+python簡(jiǎn)單實(shí)現(xiàn)爬蟲的功能

    詳解Selenium+PhantomJS+python簡(jiǎn)單實(shí)現(xiàn)爬蟲的功能

    這篇文章主要介紹了詳解Selenium+PhantomJS+python簡(jiǎn)單實(shí)現(xiàn)爬蟲的功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評(píng)論