欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pytorch+PyG實(shí)現(xiàn)GraphSAGE過(guò)程示例詳解

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

GraphSAGE簡(jiǎn)介

GraphSAGE(Graph Sampling and Aggregation)是一種常見(jiàn)的圖神經(jīng)網(wǎng)絡(luò)模型,主要用于結(jié)點(diǎn)級(jí)別的表征學(xué)習(xí)。該模型基于采樣和聚合策略,將一個(gè)結(jié)點(diǎn)及其鄰居節(jié)點(diǎn)信息融合在一起,得到其表征表示,并通過(guò)多輪迭代更新來(lái)提高表征的精度。

實(shí)現(xiàn)步驟

數(shù)據(jù)準(zhǔn)備

在本次實(shí)現(xiàn)中,我們?nèi)匀皇褂肅ora數(shù)據(jù)集作為示例進(jìn)行測(cè)試,由于GraphSage主要聚焦于單一節(jié)點(diǎn)特征的更新,因此這里不需要對(duì)數(shù)據(jù)集做特別處理,只需要將數(shù)據(jù)轉(zhuǎn)化成PyG格式即可。

import torch.nn.functional as F
from torch_geometric.datasets import Planetoid
from torch_geometric.utils import from_networkx, to_networkx
# 加載cora數(shù)據(jù)集
dataset = Planetoid(root='./cora', name='Cora')
data = dataset[0]
# 將nx.Graph形式的圖轉(zhuǎn)換成PyG需要的格式
graph = to_networkx(data)
data = from_networkx(graph)
# 獲取節(jié)點(diǎn)數(shù)量和特征向量維度
num_nodes = data.num_nodes
num_features = dataset.num_features
num_classes = dataset.num_classes
# 建立需要訓(xùn)練的節(jié)點(diǎn)分割數(shù)據(jù)集
data.train_mask = torch.zeros(num_nodes, dtype=torch.bool)
data.val_mask = torch.zeros(num_nodes, dtype=torch.bool)
data.test_mask = torch.zeros(num_nodes, dtype=torch.bool)
data.train_mask[:num_nodes - 1000] = True
data.test_mask[-1000:] = True
data.val_mask[num_nodes - 2000: num_nodes - 1000] = True

實(shí)現(xiàn)模型

接下來(lái),我們需要定義GraphSAGE模型。與傳統(tǒng)的GCN中只需要一層卷積操作不同,GraphSAGE包含兩層卷積和采樣(也稱“聚合”)操作。

from torch.nn import Sequential as Seq, Linear as Lin, ReLU
from torch_geometric.nn import SAGEConv
class GraphSAGE(torch.nn.Module):
    def __init__(self, hidden_channels, num_layers):
        super(GraphSAGE, self).__init__()
        self.convs = nn.ModuleList()
        for i in range(num_layers):
            in_channels = hidden_channels if i != 0 else num_features
            out_channels = num_classes if i == num_layers - 1 else hidden_channels
            self.convs.append(SAGEConv(in_channels, out_channels))
    def forward(self, x, edge_index):
        for _, conv in enumerate(self.convs[:-1]):
            x = F.relu(conv(x, edge_index))
        # 最后一層不用激活函數(shù)
        x = self.convs[-1](x, edge_index)
        return F.log_softmax(x, dim=-1)

在上述代碼中,我們實(shí)現(xiàn)了多層GraphSAGE卷積和相應(yīng)的聚合函數(shù),并使用ReLU和softmax函數(shù)來(lái)進(jìn)行特征提取和分類分?jǐn)?shù)的輸出。

模型訓(xùn)練

定義好模型之后,就可以開(kāi)始針對(duì)Cora數(shù)據(jù)集進(jìn)行模型訓(xùn)練。首先還是需要先指定優(yōu)化器和損失函數(shù),并設(shè)定一些參數(shù)用于記錄訓(xùn)練過(guò)程中的信息,如Epochs、Batch size、學(xué)習(xí)率等。

# 初始化GraphSage并指定參數(shù)
num_layers = 2
hidden_channels = 256
model = GraphSAGE(hidden_channels, num_layers).to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
loss_func = nn.CrossEntropyLoss()
# 訓(xùn)練過(guò)程
for epoch in range(500):
    model.train()
    optimizer.zero_grad()
    out = model(data.x.to(device), data.edge_index.to(device))
    loss = loss_func(out[data.train_mask], data.y.to(device)[data.train_mask])
    loss.backward()
    optimizer.step()
    # 在各個(gè)測(cè)試階段檢測(cè)一下準(zhǔn)確率
    if epoch % 10 == 0:
        with torch.no_grad():
            _, pred = model(data.x.to(device), data.edge_index.to(device)).max(dim=1)
            correct = float(pred[data.test_mask].eq(data.y.to(device)[data.test_mask]).sum().item())
            acc = correct / data.test_mask.sum().item()
            print("Epoch {:03d}, Train Loss {:.4f}, Test Acc {:.4f}".format(
                epoch, loss.item(), acc))

在上述代碼中,我們使用有標(biāo)記的訓(xùn)練數(shù)據(jù)擬合GraphSAGE模型,在各個(gè)驗(yàn)證階段測(cè)試準(zhǔn)確率,并通過(guò)梯度下降法優(yōu)化損失函數(shù)。

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

相關(guān)文章

  • Python構(gòu)建圖像分類識(shí)別器的方法

    Python構(gòu)建圖像分類識(shí)別器的方法

    今天小編就為大家分享一篇Python構(gòu)建圖像分類識(shí)別器的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 利用Python和C++實(shí)現(xiàn)解析gltf文件

    利用Python和C++實(shí)現(xiàn)解析gltf文件

    gltf是類似于stl、obj、ply等常見(jiàn)的3D對(duì)象存儲(chǔ)格式,它被設(shè)計(jì)出來(lái)是為了便于渲染的數(shù)據(jù)轉(zhuǎn)換和傳輸,本文為大家介紹了使用Python和C++解析gltf文件的方法,感興趣的可以了解下
    2023-09-09
  • Python中的文件和目錄操作實(shí)現(xiàn)代碼

    Python中的文件和目錄操作實(shí)現(xiàn)代碼

    對(duì)于文件和目錄的處理,雖然可以通過(guò)操作系統(tǒng)命令來(lái)完成,但是Python語(yǔ)言為了便于開(kāi)發(fā)人員以編程的方式處理相關(guān)工作,提供了許多處理文件和目錄的內(nèi)置函數(shù)。重要的是,這些函數(shù)無(wú)論是在Unix、Windows還是Macintosh平臺(tái)上,它們的使用方式是完全一致的。
    2011-03-03
  • 初次部署django+gunicorn+nginx的方法步驟

    初次部署django+gunicorn+nginx的方法步驟

    這篇文章主要介紹了初次部署django+gunicorn+nginx的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • python四個(gè)坐標(biāo)點(diǎn)對(duì)圖片區(qū)域最小外接矩形進(jìn)行裁剪

    python四個(gè)坐標(biāo)點(diǎn)對(duì)圖片區(qū)域最小外接矩形進(jìn)行裁剪

    在圖像裁剪操作中,opencv和pillow兩個(gè)庫(kù)都具有相應(yīng)的函數(shù),如果想要對(duì)目標(biāo)的最小外接矩形進(jìn)行裁剪該如何操作呢?本文就來(lái)詳細(xì)的介紹一下
    2021-06-06
  • Python爬蟲實(shí)戰(zhàn):分析《戰(zhàn)狼2》豆瓣影評(píng)

    Python爬蟲實(shí)戰(zhàn):分析《戰(zhàn)狼2》豆瓣影評(píng)

    這篇文章主要介紹了Python爬蟲實(shí)戰(zhàn):《戰(zhàn)狼2》豆瓣影評(píng)分析,小編在這里使用的是python版本3.5,需要的朋友可以參考下
    2018-03-03
  • python使用tkinter實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    python使用tkinter實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了python使用tkinter實(shí)現(xiàn)簡(jiǎn)單計(jì)算器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python類反射機(jī)制使用實(shí)例解析

    Python類反射機(jī)制使用實(shí)例解析

    這篇文章主要介紹了Python類反射機(jī)制使用實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python使用Beautiful Soup實(shí)現(xiàn)解析網(wǎng)頁(yè)

    Python使用Beautiful Soup實(shí)現(xiàn)解析網(wǎng)頁(yè)

    在這篇文章中,我們將介紹如何使用 Python 編寫一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)爬蟲,以獲取并解析網(wǎng)頁(yè)內(nèi)容。我們將使用 Beautiful Soup 庫(kù),它是一個(gè)非常強(qiáng)大的庫(kù),用于解析和操作 HTML 和 XML 文檔。讓我們開(kāi)始吧
    2023-05-05
  • Python 編碼處理-str與Unicode的區(qū)別

    Python 編碼處理-str與Unicode的區(qū)別

    本文主要介紹Python 編碼處理的問(wèn)題,這里整理了相關(guān)資料,并詳細(xì)說(shuō)明如何處理編碼問(wèn)題,有需要的小伙伴可以參考下
    2016-09-09

最新評(píng)論