最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pytorch+PyG實現(xiàn)GIN過程示例詳解

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

GIN簡介

GIN(Graph Isomorphism Network)是一類基于圖同構的神經(jīng)網(wǎng)絡。在傳統(tǒng)的神經(jīng)網(wǎng)絡中,每個節(jié)點的特征只依賴于其自身特征,但在圖數(shù)據(jù)中,節(jié)點的特征還與其鄰居節(jié)點有關系。GIN網(wǎng)絡通過定義可重復均值池化運算來學習節(jié)點及其鄰居的特征表示,并使用多層感知器(MLP)作為逐層轉換函數(shù)進行特征提取。

實現(xiàn)步驟

數(shù)據(jù)準備

這里我們?nèi)匀贿x用Cora數(shù)據(jù)集作為示例數(shù)據(jù)。由于GIN采用基于點、簡單且無參數(shù)的鄰域聚合方式,因此不需要額外對數(shù)據(jù)做處理,直接使用即可。

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形式的圖轉換成PyG需要的格式
graph = to_networkx(data)
data = from_networkx(graph)
# 獲取節(jié)點數(shù)量和特征向量維度
num_nodes = data.num_nodes
num_features = dataset.num_features
num_classes = dataset.num_classes
# 建立需要訓練的節(jié)點分割數(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

實現(xiàn)模型

接下來,我們需要定義GIN模型。

from torch_geometric.nn import global_mean_pool
class GIN(torch.nn.Module):
    def __init__(self, hidden_dim, num_layers):
        super(GIN, self).__init__()
        self.conv1 = GINConv(mlp=nn.Sequential(nn.Linear(num_features, hidden_dim),
                                                nn.ReLU(),
                                                nn.Linear(hidden_dim, hidden_dim)))
        self.convs = nn.ModuleList()
        for _ in range(num_layers - 1):
            self.convs.append(GINConv(mlp=nn.Sequential(nn.Linear(hidden_dim, hidden_dim),
                                                        nn.ReLU(),
                                                        nn.Linear(hidden_dim, hidden_dim))))
        self.classify = nn.Sequential(nn.Linear(hidden_dim, num_classes))
    def forward(self, data):
        x, edge_index, batch = data.x, data.edge_index, data.batch
        x = F.relu(self.conv1(x, edge_index))
        for conv in self.convs:
            x = F.relu(conv(x, edge_index))
        out = global_mean_pool(x, batch)
        return self.classify(out)

在上述代碼中,我們實現(xiàn)了多層GIN的“可重復均值池化”結構,并使用MLP作為轉換函數(shù)進行多層特征提取。

模型訓練

定義好模型后,可以開始針對Cora數(shù)據(jù)集進行模型訓練了。訓練模型前先設置好優(yōu)化器和損失函數(shù),并指定訓練周期及其過程中需要記錄輸出信息的參數(shù)。

from torch_geometric.nn import GINConv, global_add_pool
# 初始化GIN并指定參數(shù)
num_layers = 5
hidden_dim = 1024
model = GIN(hidden_dim=hidden_dim, num_layers=num_layers).to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001, weight_decay=1e-06)
loss_func = nn.CrossEntropyLoss()
# 開始訓練
for epoch in range(100):
    model.train()
    optimizer.zero_grad()
    pred = model(train_data)
    loss = loss_func(pred[train_mask], train_labels)
    loss.backward()
    optimizer.step()
    # 在各個測試階段檢測一下準確率
    with torch.no_grad():
        model.eval()
        pred = model(test_data)
        test_loss = loss_func(pred[test_mask], test_labels).item()
        pred = pred.argmax(dim=-1, keepdim=True)
        correct = float(pred[test_mask].eq(test_labels.view(-1, 1)[test_mask]).sum().item())
        acc = correct / test_mask.sum().item()
        if epoch % 10 == 0:
            print("Epoch {:03d}, Train Loss {:.4f}, Test Loss {:.4f}, Test Acc {:.4f}".format(
                epoch, loss.item(), test_loss, acc))

以上就是Pytorch+PyG實現(xiàn)GIN過程示例詳解的詳細內(nèi)容,更多關于Pytorch PyG實現(xiàn)GIN的資料請關注腳本之家其它相關文章!

相關文章

  • django中url映射規(guī)則和服務端響應順序的實現(xiàn)

    django中url映射規(guī)則和服務端響應順序的實現(xiàn)

    這篇文章主要介紹了django中url映射規(guī)則和服務端響應順序的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Ubuntu權限不足無法創(chuàng)建文件夾解決方案

    Ubuntu權限不足無法創(chuàng)建文件夾解決方案

    這篇文章主要介紹了Ubuntu權限不足無法創(chuàng)建文件夾解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • TensorFlow的環(huán)境配置與安裝教程詳解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)

    TensorFlow的環(huán)境配置與安裝教程詳解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7

    這篇文章主要介紹了TensorFlow的環(huán)境配置與安裝(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5),本文通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2020-06-06
  • python pandas實現(xiàn)excel轉為html格式的方法

    python pandas實現(xiàn)excel轉為html格式的方法

    今天小編就為大家分享一篇python pandas實現(xiàn)excel轉為html格式的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python中的logging模塊實現(xiàn)日志打印

    Python中的logging模塊實現(xiàn)日志打印

    這篇文章主要介紹了Python中的logging模塊實現(xiàn)日志打印,其實不止print打印日志方便排查問題,Python自帶的logging模塊,也可以很簡單就能實現(xiàn)日志的配置和打印,下面來看看具體的實現(xiàn)過程吧,需要的朋友可以參考一下
    2022-03-03
  • python處理寫入數(shù)據(jù)代碼講解

    python處理寫入數(shù)據(jù)代碼講解

    在本篇文章里小編給大家整理的是一篇關于python處理寫入數(shù)據(jù)代碼講解內(nèi)容,有興趣的朋友們可以學習下。
    2020-10-10
  • Python關于excel和shp的使用在matplotlib

    Python關于excel和shp的使用在matplotlib

    今天小編就為大家分享一篇關于Python關于excel和shp的使用在matplotlib,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Python中的xlrd模塊使用整理

    Python中的xlrd模塊使用整理

    今天給大家?guī)淼奈恼率顷P于Python的相關知識,文章圍繞著xlrd模塊的使用展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 基于pandas數(shù)據(jù)樣本行列選取的方法

    基于pandas數(shù)據(jù)樣本行列選取的方法

    下面小編就為大家分享一篇基于pandas數(shù)據(jù)樣本行列選取的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Selenium元素的常用操作方法分析

    Selenium元素的常用操作方法分析

    這篇文章主要介紹了Selenium元素的常用操作方法,結合實例形式分析Selenium在獲取元素之后針對點擊、輸入、提交、屬性獲取等常見操作相關實現(xiàn)技巧,需要的朋友可以參考下
    2018-08-08

最新評論

葵青区| 武宁县| 邻水| 灵璧县| 眉山市| 册亨县| 五寨县| 宽城| 宜兰市| 凤山市| 永昌县| 贞丰县| 乌鲁木齐县| 都匀市| 右玉县| 金门县| 江门市| 沁源县| 临清市| 定襄县| 镇赉县| 红桥区| 大厂| 广河县| 横峰县| 襄城县| 徐闻县| 龙里县| 阳西县| 三门峡市| 磴口县| 古浪县| 屏边| 平山县| 嵩明县| 宁陵县| 石阡县| 乐业县| 航空| 南澳县| 广饶县|