乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      圖神經(jīng)網(wǎng)絡(luò)入門

       taotao_2016 2021-11-30
      圖片

      目錄

      1. 圖神經(jīng)網(wǎng)絡(luò)背后的動(dòng)機(jī)
      2. GNN 算法
      3. GNN 在 Karate 網(wǎng)絡(luò)上的實(shí)現(xiàn)
      4. GNN 的應(yīng)用
      5. GNN 的挑戰(zhàn)
      6. GNN 研究論文

      圖神經(jīng)網(wǎng)絡(luò)背后的動(dòng)機(jī)

      由于圖形能夠以可以客觀分析的方式表示現(xiàn)實(shí)世界,因此如今它們受到了很多關(guān)注。圖可用于表示許多現(xiàn)實(shí)世界的數(shù)據(jù)集,如社交網(wǎng)絡(luò)、分子結(jié)構(gòu)、地圖、網(wǎng)絡(luò)鏈接數(shù)據(jù)、自然科學(xué)、蛋白質(zhì)-蛋白質(zhì)相互作用網(wǎng)絡(luò)、知識(shí)圖等。
      此外,非結(jié)構(gòu)化數(shù)據(jù),如圖像文本可以以圖形的形式建模。圖是對(duì)一組對(duì)象(節(jié)點(diǎn))及其關(guān)系(邊)進(jìn)行建模的數(shù)據(jù)結(jié)構(gòu)。
      圖分析作為一種獨(dú)特的機(jī)器學(xué)習(xí)非歐數(shù)據(jù)結(jié)構(gòu),側(cè)重于節(jié)點(diǎn)分類、圖分類、鏈接預(yù)測(cè)、圖聚類和圖可視化等任務(wù)。
      圖神經(jīng)網(wǎng)絡(luò) (GNN) 是基于深度學(xué)習(xí)的方法,可在圖域上運(yùn)行。由于其在涉及非歐空間的現(xiàn)實(shí)世界問(wèn)題中的良好表現(xiàn),GNN 已成為近來(lái)廣泛應(yīng)用的圖分析方法。
      圖片

      圖神經(jīng)網(wǎng)絡(luò)算法

      一個(gè)節(jié)點(diǎn)可以用它的特征和圖中的相鄰節(jié)點(diǎn)來(lái)表示。GNN 的目標(biāo)是學(xué)習(xí)一個(gè)狀態(tài)嵌入,它對(duì)每個(gè)節(jié)點(diǎn)的鄰域信息進(jìn)行編碼。狀態(tài)嵌入用于產(chǎn)生輸出,例如預(yù)測(cè)節(jié)點(diǎn)標(biāo)簽的分布。
      GNNs 是信息擴(kuò)散機(jī)制和神經(jīng)網(wǎng)絡(luò)的結(jié)合,代表了一組轉(zhuǎn)換函數(shù)和一組輸出函數(shù)。信息擴(kuò)散機(jī)制由節(jié)點(diǎn)表示,節(jié)點(diǎn)在其中更新其狀態(tài),并通過(guò)將“消息”傳遞給其相鄰節(jié)點(diǎn)來(lái)交換信息,直到它們達(dá)到穩(wěn)定的平衡。
      轉(zhuǎn)換函數(shù)以每個(gè)節(jié)點(diǎn)的特征、每個(gè)節(jié)點(diǎn)的邊緣特征、相鄰節(jié)點(diǎn)的狀態(tài)和相鄰節(jié)點(diǎn)的特征作為輸入,輸出是節(jié)點(diǎn)的新?tīng)顟B(tài)。
      圖片
      圖 2

      空手道俱樂(lè)部社交網(wǎng)絡(luò)上的圖神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)

      在本節(jié)中,讓我們看看如何將 GNN 應(yīng)用于空手道網(wǎng)絡(luò),這是一種簡(jiǎn)單的圖網(wǎng)絡(luò)。

      1. 空手道網(wǎng)絡(luò)資料背景:

      兩個(gè) 34×34 矩陣
      1. ZACHE 對(duì)稱,二進(jìn)制
      2. ZACHC 對(duì)稱,有值。
      這些數(shù)據(jù)是 Wayne Zachary 從大學(xué)空手道俱樂(lè)部成員那里收集的。ZACHE 矩陣表示俱樂(lè)部成員之間是否存在聯(lián)系;ZACHC 矩陣表示關(guān)聯(lián)的相對(duì)強(qiáng)度(發(fā)生互動(dòng)的俱樂(lè)部?jī)?nèi)外情況的數(shù)量)。
      Zachary (1977) 利用這些數(shù)據(jù)和網(wǎng)絡(luò)沖突解決的信息流模型來(lái)解釋這個(gè)群體在成員之間發(fā)生糾紛后的分裂。

      2.使用的數(shù)據(jù)

      此數(shù)據(jù)可以轉(zhuǎn)換為 2 個(gè) CSV 文件:
      1. node.csv 存儲(chǔ)每個(gè)俱樂(lè)部成員及其屬性。34 名俱樂(lè)部成員用“Id”從 0 到 33 表示。他們所在的俱樂(lè)部 – Mr Hi(Node id 0) 或 Mr Officer(Node id 1) 用“Club”欄表示。
      2. edge.csv 存儲(chǔ)兩個(gè)俱樂(lè)部成員之間的成對(duì)交互。權(quán)重被賦予由“權(quán)重”特征表示的節(jié)點(diǎn) id 之間的這些交互。
      圖片
      Nodes.csv – Self Project
      圖片
      Edges.csv – Self Project

      3. 使用 DGL 庫(kù)進(jìn)行圖形表示:

      然后我們構(gòu)建一個(gè)圖,其中每個(gè)節(jié)點(diǎn)都是俱樂(lè)部成員,每條邊代表他們的互動(dòng)。在 DGL 中,節(jié)點(diǎn)是從零開始的連續(xù)整數(shù)。
      因此,在準(zhǔn)備數(shù)據(jù)時(shí),重要的是重新標(biāo)記或重新洗牌行順序,以便第一行對(duì)應(yīng)于第一個(gè)節(jié)點(diǎn),依此類推。
      在本例中,我們已經(jīng)按照正確的順序準(zhǔn)備了數(shù)據(jù),因此我們可以通過(guò)edges.csv 表中的“Src”和“Dst”列創(chuàng)建圖形。
      加載 DGL 圖的代碼:
      import dgl
      src = edges_data['Src'].to_numpy()
      dst = edges_data['Dst'].to_numpy()
      # Create a DGL graph from a pair of numpy arrays
      g = dgl.graph((src, dst))
      出于可視化目的,我們可以將 DGL 圖轉(zhuǎn)換為網(wǎng)絡(luò)圖:
      import networkx as nx
      # Since the actual graph is undirected, we convert it for visualization purpose.
      nx_g = g.to_networkx().to_undirected()
      # Kamada-Kawaii layout usually looks pretty for arbitrary graphs
      pos = nx.kamada_kawai_layout(nx_g)
      nx.draw(nx_g,pos, with_labels=True)
      圖片
      DGL 圖網(wǎng)絡(luò)

      4. 空手道網(wǎng)絡(luò)上的 GNN 模型訓(xùn)練:

      將俱樂(lè)部特征添加到 DGL 圖中:
      # The 'Club' column represents which community does each node belong to.
      # The values are of string type, so we must convert it to either categorical
      # integer values or one-hot encoding.
      club = nodes_data['Club'].to_list()
      # Convert to categorical integer values with 0 for 'Mr. Hi', 1 for 'Officer'.
      club = torch.tensor([c == 'Officer' for c in club]).long()
      # We can also convert it to one-hot encoding.
      club_onehot = F.one_hot(club)
      print(club_onehot)
      # Use `g.ndata` like a normal dictionary
      g.ndata.update({'club' : club, 'club_onehot' : club_onehot})
      將邊緣特征更新為 DGL 圖:
      # Get edge features from the DataFrame and feed it to graph.
      edge_weight = torch.tensor(edges_data['Weight'].to_numpy())
      # Similarly, use `g.edata` for getting/setting edge features.
      g.edata['weight'] = edge_weight
      更新節(jié)點(diǎn)嵌入:
      node_embed = nn.Embedding(g.number_of_nodes(), 5)  # Every node has an embedding of size 5.
      inputs = node_embed.weight                  # Use the embedding weight as the node features.
      nn.init.xavier_uniform_(inputs)
      更新 2 個(gè)組長(zhǎng)的標(biāo)簽功能 - 0 和 33 ids 為:
      labels = g.ndata['club']
      labeled_nodes = [033]
      使用 GraphSage 模型將 GNN 實(shí)現(xiàn)為:
      from dgl.nn import SAGEConv
      # build a two-layer GraphSAGE model
      class GraphSAGE(nn.Module):
          def __init__(self, in_feats, h_feats, num_classes):
              super(GraphSAGE, self).__init__()
              self.conv1 = SAGEConv(in_feats, h_feats, 'mean')
              self.conv2 = SAGEConv(h_feats, num_classes, 'mean')
          def forward(self, g, in_feat):
              h = self.conv1(g, in_feat)
              h = F.relu(h)
              h = self.conv2(g, h)
              return h
      # Create the model with given dimensions 
      # input layer dimension: 5, node embeddings
      # hidden layer dimension: 16
      # output layer dimension: 2, the two classes, 0 and 1
      net = GraphSAGE(5162)
      設(shè)置損失和優(yōu)化器并將模型訓(xùn)練為:
      # in this case, loss will in training loop
      optimizer = torch.optim.Adam(itertools.chain(net.parameters(), node_embed.parameters()), lr=0.01)
      all_logits = []
      for e in range(100):
          # forward
          logits = net(g, inputs)
          # compute loss
          logp = F.log_softmax(logits, 1)
          loss = F.nll_loss(logp[labeled_nodes], labels[labeled_nodes])
          # backward
          optimizer.zero_grad()
          loss.backward()
          optimizer.step()
          all_logits.append(logits.detach())
          if e % 5 == 0:
              print('In epoch {}, loss: {}'.format(e, loss))
      輸出 :
      圖片
      獲得結(jié)果為:
      pred = torch.argmax(logits, axis=1)
      print('Accuracy', (pred == labels).sum().item() / len(pred))
      輸出 :
      圖片

      圖神經(jīng)網(wǎng)絡(luò)的應(yīng)用

      GNN 能夠解決的問(wèn)題 :
      1. 節(jié)點(diǎn)分類:手頭的任務(wù)是通過(guò)利用其鄰居的標(biāo)簽來(lái)確定節(jié)點(diǎn)的標(biāo)簽。通常, 這種類型的問(wèn)題是以半監(jiān)督的方式訓(xùn)練的,只有一部分圖被標(biāo)記。
      2. 圖分類:該過(guò)程是將整個(gè)圖分為不同的類別。
        示例:在生物信息學(xué)中確定蛋白質(zhì)是否為酶,在 NLP或社交網(wǎng)絡(luò)分析中對(duì)文檔進(jìn)行分類。
      3. 圖形可視化:它處理圖形的可視化表示,揭示數(shù)據(jù)中可能存在的結(jié)構(gòu)和異常,并幫助用戶理解圖形。正如本博客前面提到的,一些可視化圖形的方法是網(wǎng)絡(luò)和 dgl。
      4. 鏈接預(yù)測(cè):該算法用于理解圖中實(shí)體之間的關(guān)系,并嘗試預(yù)測(cè)兩個(gè)實(shí)體之間是否存在連接。它還可以用于推薦系統(tǒng)和預(yù)測(cè)犯罪組織。
        它在社交網(wǎng)絡(luò)中用于推斷社交互動(dòng)或向用戶推薦潛在朋友。
      5. 圖聚類:這意味著以圖的形式對(duì)數(shù)據(jù)進(jìn)行聚類。有兩種不同形式的聚類在圖數(shù)據(jù)頂點(diǎn)和圖聚類上執(zhí)行。
        頂點(diǎn)聚類是指 根據(jù)邊權(quán)重或邊距離將圖的節(jié)點(diǎn)聚類成一組密集連接的區(qū)域。
        圖聚類是將圖作為待聚類的對(duì)象,根據(jù)聚類特征的相似性對(duì)這些對(duì)象進(jìn)行聚類。

      圖神經(jīng)網(wǎng)絡(luò)的挑戰(zhàn)

      1.動(dòng)態(tài)特性——由于 GNN 是動(dòng)態(tài)圖,處理具有動(dòng)態(tài)結(jié)構(gòu)的圖可能是一個(gè)挑戰(zhàn)。
      2.可擴(kuò)展性——在社交網(wǎng)絡(luò)或推薦系統(tǒng)中應(yīng)用嵌入方法對(duì)于包括 GNN 在內(nèi)的所有圖嵌入算法來(lái)說(shuō)在計(jì)算上可能很復(fù)雜。
      3.非結(jié)構(gòu)化數(shù)據(jù)——GNNs 也難以應(yīng)用于非結(jié)構(gòu)化場(chǎng)景。為 GNN 尋找最佳圖生成方法是一項(xiàng)具有挑戰(zhàn)性的任務(wù)。

      圖神經(jīng)網(wǎng)絡(luò)研究論文

      列出了一些論文,以深入了解 GNN 及其在某些應(yīng)用領(lǐng)域中正在進(jìn)行的工作——
      1. A Comprehensive Survey on Graph Neural Networks. arxiv 2019. https:///pdf/1901.00596.pdf
      Zonghan Wu, Shirui Pan, Fengwen Chen, Guodong Long, Chengqi Zhang, Philip S. Yu.
      1. Graph Neural Networks: A Review of Methods and Applications. AI Open 2020. https:///10.1016/j.aiopen.2021.01.001
      Jie Zhou, Ganqu Cui, Zhengyan Zhang, Cheng Yang, Zhiyuan Liu, Maosong Sun.
      1. Supervised Neural Networks for the Classification of Structures. IEEE TNN 1997. https://ieeexplore./abstract/document/572108
      Alessandro Sperduti and Antonina Starita.
      1. A new model for learning in graph domains. IJCNN 2005. https://www./profile/Franco_Scarselli/publication/4202380_A_new_model_for_earning_in_raph_domains/links/0c9605188cd580504f000000.pdf
      Marco Gori, Gabriele Monfardini, Franco Scarselli.
      1. Deep Learning on Graphs: A Survey. arxiv 2018.
      Ziwei Zhang, Peng Cui, Wenwu Zhu.

      ☆ END ☆

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多