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

python機器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)原理解析

 更新時間:2022年05月10日 15:19:22   作者:Mr.琛  
這篇文章主要為大家介紹了GCN圖卷積神經(jīng)網(wǎng)絡(luò)原理及代碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

1. 圖信號處理知識

圖卷積神經(jīng)網(wǎng)絡(luò)涉及到圖信號處理的相關(guān)知識,也是由圖信號處理領(lǐng)域的知識推導(dǎo)發(fā)展而來,了解圖信號處理的知識是理解圖卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)。

1.1 圖的拉普拉斯矩陣

拉普拉斯矩陣是體現(xiàn)圖結(jié)構(gòu)關(guān)聯(lián)的一種重要矩陣,是圖卷積神經(jīng)網(wǎng)絡(luò)的一個重要部分。

1.1.1 拉普拉斯矩陣的定義及示例

實例:

按照上述計算式子,可以得到拉普拉斯矩陣為:

1.1.2 正則化拉普拉斯矩陣

1.1.3 拉普拉斯矩陣的性質(zhì)

1.2 圖上的傅里葉變換

傅里葉變換是一種分析信號的方法,它可分析信號的成分,也可用這些成分合成信號。它將信號從時域轉(zhuǎn)換到頻域,從頻域視角給出了信號處理的另一種解法。(1)對于圖結(jié)構(gòu),可以定義圖上的傅里葉變換(GFT),對于任意一個在圖G上的信號x,其傅里葉變換表示為:

從線代角度,可以清晰的看出:v1,…, vn構(gòu)成了N維特征空間中的一組完備基向量,G中任意一個圖信號都可表示為這些基向量的線性加權(quán)求和,系數(shù)為圖信號對應(yīng)傅里葉基上的傅里葉系數(shù)。

回到之前提到的拉普拉斯矩陣刻畫平滑度的總變差:

可以看成:刻畫圖平滑度的總變差是圖中所有節(jié)點特征值的線性組合,權(quán)值為傅里葉系數(shù)的平方??傋儾钊∽钚≈档臈l件是圖信號與最小的特征值所對應(yīng)的特征向量完全重合,結(jié)合其描述圖信號整體平滑度的意義,可將特征值等價成頻率:特征值越低,頻率越低,對應(yīng)的傅里葉基變化緩慢,即相近節(jié)點的信號值趨于一致。

把圖信號所有的傅里葉系數(shù)結(jié)合稱為頻譜(spectrum),頻域的視角從全局視角既考慮信號本身,也考慮到圖的結(jié)構(gòu)性質(zhì)。

1.3 圖信號濾波器

圖濾波器(Graph Filter)為對圖中的頻率分量進行增強或衰減,圖濾波算子核心為其頻率響應(yīng)矩陣,為濾波器帶來不同的濾波效果。

故圖濾波器根據(jù)濾波效果可分為低通,高通和帶通。

低通濾波器:保留低頻部分,關(guān)注信號的平滑部分;

高通濾波器:保留高頻部分,關(guān)注信號的劇烈變化部分;

帶通濾波器:保留特定頻段部分;

而拉普拉斯矩陣多項式擴展可形成圖濾波器H:

2. 圖卷積神經(jīng)網(wǎng)絡(luò)

2.1 數(shù)學(xué)定義

圖卷積運算的數(shù)學(xué)定義為:

上述公式存在一個較大問題:學(xué)習(xí)參數(shù)為N,這涉及到整個圖的所有節(jié)點,對于大規(guī)模數(shù)據(jù)極易發(fā)生過擬合。

進一步的化簡推導(dǎo):將之前說到的拉普拉斯矩陣的多項式展開代替上述可訓(xùn)練參數(shù)矩陣。

此結(jié)構(gòu)內(nèi)容即定義為圖卷積層(GCN layer),有圖卷積層堆疊得到的網(wǎng)絡(luò)模型即為圖卷積網(wǎng)絡(luò)GCN。

2.2 GCN的理解及時間復(fù)雜度

圖卷積層是對頻率響應(yīng)矩陣的極大化簡,將本要訓(xùn)練的圖濾波器直接退化為重歸一化拉普拉斯矩陣

2.3 GCN的優(yōu)缺點

優(yōu)點:GCN作為近年圖神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)之作,對處理圖數(shù)據(jù)非常有效,其對圖結(jié)構(gòu)的結(jié)構(gòu)信息和節(jié)點的屬性信息同時學(xué)習(xí),共同得到最終的節(jié)點特征表示,考慮到了節(jié)點之間的結(jié)構(gòu)關(guān)聯(lián)性,這在圖操作中是非常重要的。

缺點:過平滑問題(多層疊加之后,節(jié)點的表示向量趨向一致,節(jié)點難以區(qū)分),由于GCN具有一個低通濾波器的作用(j聚合特征時使得節(jié)點特征不斷融合),多次迭代后特征會趨于相同。

3. Pytorch代碼解析

GCN層的pytorch實現(xiàn):

class GraphConvolutionLayer(nn.Module):
    '''
        圖卷積層:Lsym*X*W
            其中 Lsym表示正則化圖拉普拉斯矩陣, X為輸入特征, W為權(quán)重矩陣, X'表示輸出特征;
            *表示矩陣乘法
    '''
    def __init__(self, input_dim, output_dim, use_bias=True):
        #初始化, parameters: input_dim-->輸入維度, output_dim-->輸出維度, use_bias-->是否使用偏置項, boolean
        super(GraphConvolutionLayer,self).__init__()
        self.input_dim=input_dim
        self.output_dim=output_dim
        self.use_bias=use_bias #是否加入偏置, 默認(rèn)為True
        self.weight=nn.Parameter(torch.Tensor(input_dim, output_dim))#權(quán)重矩陣為可訓(xùn)練參數(shù)
        if self.use_bias==True: #加入偏置
            self.bias=nn.Parameter(torch.Tensor(output_dim)) 
        else: #設(shè)置偏置為空
            self.register_parameter('bias', None)
        self.reset_parameters()
    def reset_parameters(self):
        #初始化參數(shù)
        stdv = 1. / math.sqrt(self.weight.size(1))
        self.weight.data.uniform_(-stdv, stdv)#使用均勻分布U(-stdv,stdv)初始化權(quán)重Tensor
        if self.bias is not None:
            self.bias.data.uniform_(-stdv, stdv)
    def forward(self, adj, input_feature):
        #前向傳播, parameters: adj-->鄰接矩陣(輸入為正則化拉普拉斯矩陣), input_future-->輸入特征矩陣
        temp=torch.mm(input_feature, self.weight)#矩陣乘法, 得到X*W
        output_feature=torch.sparse.mm(adj, temp)#由于鄰接矩陣adj為稀疏矩陣, 采用稀疏矩陣乘法提高計算效率, 得到Lsym*temp=Lsym*X*W
        if self.use_bias==True: #若設(shè)置了偏置, 加入偏置項
            output_feature+=self.bias
        return output_feature

定義兩層的GCN網(wǎng)絡(luò)模型:

class GCN(nn.Module):
    '''
        定義兩層GCN網(wǎng)絡(luò)模型
    '''
    def __init__(self, input_dim, hidden_dim, output_dim):
        #初始化, parameters: input_dim-->輸入維度, hidden_dim-->隱藏層維度, output_dim-->輸出維度
        super.__init__(GCN, self).__init__()
        #定義兩層圖卷積層
        self.gcn1=GraphConvolutionLayer(input_dim, hidden_dim)
        self.gcn2=GraphConvolutionLayer(hidden_dim, output_dim)
    def forward(self, adj, feature):
        #前向傳播, parameters: adj-->鄰接矩陣, feature-->輸入特征
        x=F.relu(self.gcn1(adj, feature))
        x=self.gcn2(adj, x)
        return F.log_softmax(x, dim=1)

以上就是GCN圖卷積神經(jīng)網(wǎng)絡(luò)原理及代碼解析的詳細(xì)內(nèi)容,更多關(guān)于GCN圖卷積神經(jīng)網(wǎng)絡(luò)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python 將html轉(zhuǎn)換為pdf的幾種方法

    python 將html轉(zhuǎn)換為pdf的幾種方法

    這篇文章主要介紹了python 將html轉(zhuǎn)換為pdf的幾種方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • python GUI庫圖形界面開發(fā)之PyQt5信號與槽基礎(chǔ)使用方法與實例

    python GUI庫圖形界面開發(fā)之PyQt5信號與槽基礎(chǔ)使用方法與實例

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5信號與槽基礎(chǔ)使用方法與實例,需要的朋友可以參考下
    2020-03-03
  • Python?format字符串格式化函數(shù)的使用

    Python?format字符串格式化函數(shù)的使用

    本文主要介紹了Python?format字符串格式化函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • python處理寫入數(shù)據(jù)代碼講解

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

    在本篇文章里小編給大家整理的是一篇關(guān)于python處理寫入數(shù)據(jù)代碼講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-10-10
  • Python實現(xiàn)aes加密解密多種方法解析

    Python實現(xiàn)aes加密解密多種方法解析

    這篇文章主要介紹了Python實現(xiàn)aes加密解密多種方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • python+appium+yaml移動端自動化測試框架實現(xiàn)詳解

    python+appium+yaml移動端自動化測試框架實現(xiàn)詳解

    這篇文章主要介紹了python+appium+yaml移動端自動化測試框架實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 一文帶你掌握Matplotlib風(fēng)格與樣式

    一文帶你掌握Matplotlib風(fēng)格與樣式

    學(xué)過Python的小伙伴都會知道,Matplotlib是Python生態(tài)最好用的可視化工具庫,下面這篇文章主要給大家介紹了關(guān)于Matplotlib風(fēng)格與樣式的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • Python使用Networkx實現(xiàn)復(fù)雜的人物關(guān)系圖

    Python使用Networkx實現(xiàn)復(fù)雜的人物關(guān)系圖

    日常工作、生活中我們經(jīng)常會遇到一些復(fù)雜的事務(wù)關(guān)系,比如人物關(guān)系,那如何才能清楚直觀的看清楚這些任務(wù)關(guān)系呢?所以小編給大家介紹了Python如何使用Networkx實現(xiàn)復(fù)雜的人物關(guān)系圖,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 超實用Python庫之lxml使用方法詳解

    超實用Python庫之lxml使用方法詳解

    lxml是python的一個解析庫,支持HTML和XML的解析,支持XPath解析方式,下面這篇文章主要給大家介紹了關(guān)于超實用Python庫之lxml使用方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • Python實現(xiàn)向列表或數(shù)組添加元素

    Python實現(xiàn)向列表或數(shù)組添加元素

    Python中的列表是一種動態(tài)數(shù)組,可以存儲不同數(shù)據(jù)類型的元素,并提供多種方法進行元素的添加和刪除,列表是Python中非常靈活和強大的數(shù)據(jù)結(jié)構(gòu),可以通過索引訪問、修改和操作列表中的元素,列表的創(chuàng)建十分簡單,只需使用方括號括起元素,并用逗號分隔
    2024-09-09

最新評論