GCNDemoDemo

细粒度IP定位参文11(GCN):Semi-supervised classification with graph convolutional networks(2016年) 提升了图卷积的性能,使用切比雪夫的1阶近似完成了高效的图卷积架构。本文将解读图卷积神经网络中的经典论文:Semi-Supervised Classification with Graph Convolutional Networks(GCN),侧重论文的逻辑梳理,并仅笔者所能补充详尽的细节解释。这里列出论文相关的知识列表,对于扩展理解部分,以Ref.X的形式标注,如果读者已经很熟悉相关内容,可以直接跳过相应部分。 阅读详情

1. 背景

        在图卷积神经网络GCN之前,采取CNN提取图片特征,其核心在于卷积核(卷积核相当于一个小的窗口,在图片上平移,通过卷积来提取特征)。这一过程的关键点就是图片在其域中的平移不变性:

      在欧几里得几何中,平移是一种几何变换,表示把一幅图像或一个空间中的每一个点在相同方向移动相同距离。比如对图像分类任务来说,图像中的目标不管被移动到图片的哪个位置,得到的结果(标签)应该是相同的,这就是卷积NN中的平移不变性。

        CNN中的卷积是一种离散卷积(本质是一种加权求和),利用一个共享参数的过滤器kernel,通过计算中心像素点以及相邻像素点的加权和来构成feature map 实现空间特征的提取,加权系数就是卷积核的权重系数W。卷积核的系数如何确定的呢?

      随机化初值,然后根据误差函数通过BP梯度下降进行迭代优化。这是一个关键点,卷积核的参数通过优化求出才能实现特征提取的作用,而GCN的理论很大一部分工作就是为了引入可以优化的卷积参数。

 1.1  为什么是GCN?

       CNN 之所以可以应用到图像而无法应用到图网络中主要是因为图像具有平移不变性,而图网络不具备这一属性(图非欧氏空间)。由于图网络是不规整的关系型数据(如邻居节点数量的不确定和节点顺序的不确定),不存在平移不变性,难以选取固定的卷积核来适应整个图的不规则性,因此 CNN 无法直接在图上进行卷积(每一个节点的周围结构可能都是独一无二的)。

        CNN 核心在于使用了基于卷积核的卷积操作来提取图像的特征(利用卷积核实现参数共享),这里的卷积操作类似于对「计算区域内的中心节点和相邻节点进行加权求和」。利用这种平移不变性来对扫描的区域进行卷积操作,从而实现了图像特征的提取。

既然是因为卷积核的原因,可不可以不使用卷积核?

不可以,因为卷积NN的核心:

1. 利用卷积核实现参数共享(参数大小只与卷积核大小有关);

2. 局部连接性:卷积计算每次只在与卷积核大小对应的区域进行,也就是说输入和输出是局部连接的。如果不进行局部连接的话,相当于将图片的矩阵展开成向量进行输入,类似于全连接NN,此时的参数量会变得非常巨大。

3. 层次化表达(是特点,非核心):可以通过卷积层叠加得到,每一个卷积层都是在前一层的基础上进行的,意义在于,网络越往后,其提取到的特征越高级。比如说:第一层可能是一些线条,第二层可能会是一些纹理,第三层可能是一些抽象图案。

        GCN是一个针对图数据的特征提取器(与CNN的作用一样),借助谱图理论来实现在拓扑图上的卷积操作,可以使用这些特征去对图数据进行节点分类、图分类、边预测,还可以顺便得到图的嵌入表示(graph embedding),用途广泛。

大致步骤为将空域中的拓扑图结构通过傅立叶变换映射到频域中并进行卷积,然后利用逆变换返回空域,从而完成了图卷积操作。

1.2 GCN的公式

        一批N个节点的图数据,每个节点都有自己的特征,组成一个N×D维的矩阵X,另外各个节点间的关系也会形成一个N×N 维的矩阵A,即邻接矩阵,X和A便是模型的输入。GCN 的第l层表示:

多层GCN 可以通过重复应用这个公式来构建,其中:

H(l)是第l层的节点表示矩阵,每一行对应一个节点的表示;

\hat{A}=A+I 是图的邻接矩阵A加上自环(self-loop)的结果;

\hat{D} 是\hat{A} 的对角线度矩阵,其中 \hat{D_{ii}}=\sum_{j}\hat{A_{ij}};

激活函数一般选择ReLU等,引入非线形;增强模型的表达能力;

\hat{D}^{-\frac{1}{2}}\hat{A}\hat{D}^{-\frac{1}{2}} 是为了归一化邻接矩阵,使得每个节点的表示能够考虑到其邻居节点的信息。

  1.3 度矩阵 Degree

        是一个对角阵,对角上的元素为各个顶点的度(与该顶点相关联的边的数量)。注意:有向图中包括出度和入度。

其中 \hat{D}^{-\frac{1}{2}}\hat{A}\hat{D}^{-\frac{1}{2}}  是可以事先算好的,因为\hat{D} 由A计算而来,而A是输入之一。

2. GCN 原理

        GCN输入一个图,通过若干层GCN每个node的特征从X变成了Z,但无论中间有多少层,node之间的连接关系A,都是共享的。假设构造一个两层的GCN,激活函数分别采用ReLU和Softmax,则整体的正向传播的公式为:

        最后针对所有带标签的节点计算cross entropy 损失函数,就可以训练一个node classification的模型了。由于即使只有很少的node有标签也能训练,所以也称该方法为半监督分类。每一层GCN的输入都是邻接矩阵A和node的特征H,那么直接做一个内积,再乘一个参数矩阵W,然后激活一下,就相当于一个简单的NN层。

        实验证明,即使这么简单的NN层,就已经很强大了。但这个简单模型有几个局限性:

1. 若只使用A,由于对角线上都是0,在和特征矩阵H 相乘时,只会计算一个node 的所有邻居特征的加权和,该node 自己的特征却被忽略了。因此给A 加上一个单位矩阵I,这样就让对角线元素变成1了。
2. A是没有经过归一化的矩阵,这样与特征矩阵H 相乘会改变特征原本的分布,产生一些不可预测的问题。需要对A做一个标准化处理:让A的每一行加起来为1,即乘上度矩阵。

        改进后最终的层特征传播公式如下:

        公式中的D^{-\frac{1}{2}}AD^{-\frac{1}{2}} 与对称归一化拉普拉斯矩阵十分类似,而在谱图卷积的核心就是使用对称归一化拉普拉斯矩阵,这也是GCN的卷积叫法的来历。

3.应用&数据

        图NN最难的一步,就是把数据处理成算法能够使用的标准格式,这比其训练更难一些。设计一个小型的数据集,做一个GCN的demo。

3.1 数据探索

        12个商家的样本,11为黑样本(卖片的),0为白样本。

  3.2 图数据构建

         IP是这里的介质,用其来构建一个同构图,然后利用商品标题litem_list、注册时长days、商品数目nums来作为特征,进行训练、验证、预测。

df = pd.read_csv('data.csv')
df_new = df.merge(df, on='last_ip')
# df_new = df_new[df_new['shop_id_x'] != df_new['shop_id_y']]  # 去除自身关联
df_new = df_new[['shop_id_x', 'shop_id_y', 'shop_name_x', 'shop_name_y', 'last_ip']]
print(df_new.head(20))
scr = df_new['shop_id_x'].to_numpy()
dst = df_new['shop_id_y'].to_numpy()

关联结果:

        可视化后,大概分为两个群体,以及一个孤立点。图NN通过添加自环的形式,对孤立节点,也能很好的进行预测。

4. 图NN构建

4.1 节点编码

        注意使用DGL框架,输入的节点必须是数字类型的,所以要对节点进行数字编码。这里直接使用shop_id。

4.1 构建dgl图

        根据编码后的节点,构建dgl的图‍。pip install dgl

import dgl
g = dgl.graph((scr, dst))  # dgl图构建
g = dgl.add_self_loop(g)  # 添加自环,否则部分节点无法预测
g = dgl.to_bidirected(g)  # 去重 还可以通过nx去重
print(g)

4.3 特征工程

1. 处理文本特征

import jieba
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
df['text'] = df['item_list'].apply(lambda x: ' '.join(jieba.cut(x)))  # 进行分词处理
# 初始化
vectorizer = CountVectorizer(max_features=25, token_pattern=r"(?u)\b\w+\b", min_df=1, analyzer='word')
vectorizer.fit(df['text'])
# 词转换成CountVectorizer向量
feat_item = vectorizer.transform(df['text'])
feat_item = pd.DataFrame(feat_item.toarray())

把单词还原

# 对字典进行反转
onehotdic = {}
for k, v in vectorizer_word.vocabulary_.items():
    onehotdic[v] = k
feat_item.columns = [onehotdic[i] for i in list(feat_item.columns)]
feats = pd.concat([feat_item, df[['days', 'nums']]], axis=1)

2. 处理数字特征

        每个词表示每个样本包含某个词的个数(限制了top25个),和数字特征拼接起来,共27个维度。图NN的特征,需要进行归一化,然后再转换成tensor格式。

from sklearn.preprocessing import MinMaxScaler
import torch
transfer = MinMaxScaler(feature_range=(0, 1))  # 实例化一个转换器类
features = transfer.fit_transform(feats)  # 调用fit_tra
features = torch.tensor(np.array(features))

4.4 数据集划分

        mask操作,相当于常规ML的训练集、验证集、测试集划分。

def sample_mask(idx, n):
    mask = np.zeros(n)
    mask[idx] = 1
    return np.array(mask, dtype=np.bool_)

# 0-6是黑样本,7-11是白样本,1 这个样本是独立的
idx_train = [0, 2, 3, 4, 7, 8, 9]
idx_val = [5, 6, 10]
idx_test = [1, 11]
train_mask = sample_mask(idx_train, 12)
val_mask = sample_mask(idx_val, 12)
test_mask = sample_mask(idx_test, 12)
masks = train_mask, val_mask, test_mask

5. 模型构建

1. 模型定义

import torch
import torch.nn as nn
import torch.nn.functional as F
import dgl.nn as dglnn

torch.set_default_tensor_type(torch.DoubleTensor)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
in_size = features.shape[1]
out_size = 2
class GCN(nn.Module):
    def __init__(self, in_size, hid_size, out_size):
        super().__init__()
        self.layers = nn.ModuleList()
        # two-layer GCN
        self.layers.append(dglnn.GraphConv(in_size, hid_size, activation=F.relu))
        self.layers.append(dglnn.GraphConv(hid_size, out_size))
        self.dropout = nn.Dropout(0.3)

        def forward(self, g, features):
            h = features
            for i, layer in enumerate(self.layers):
                if i != 0:
                    h = self.dropout(h)
                h = layer(g, h)
            # h = F.softmax(h,dim=1)
            return h

2. 模型训练

# 输入依次为图、结点特征、标签、训练、验证、测试的masks、模型、epoches
# 图和结点特征和标签应该输入所有结点的数据,而不能只输入验证集的数据
def train(g, features, labels, masks, model, epoches):
    train_mask = masks[0]
    val_mask = masks[1]
    loss_fcn = nn.CrossEntropyLoss()
    optimizer = torch.optim.Adam(model.parameters(), lr=1e-2, weight_decay=5e-4)
    for epoch in range(epoches):
        model.train()
        logits = model(g, features)
        loss = loss_fcn(logits[train_mask], labels[train_mask])
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        acc = evaluate(g, features, labels, val_mask, model)
        print("Epoch {:05d} | Loss {:.4f} | Accuracy {:.4f} ".format(epoch, loss.item(), acc))

3. 模型验证

# 输入依次为图、结点特征、标签、验证集或测试集的mask、模型
def evaluate(g, features, labels, mask, model):
    model.eval()
    with torch.no_grad():
        logits = model(g, features)
        logits = logits[mask]
        labels = labels[mask]
        # probabilities = F.softmax(logits, dim=1)
        _, indices = torch.max(logits, dim=1)
        correct = torch.sum(indices == labels)
        return correct.item() * 1.0 / len(labels)

4. 开始训练

        样本很少,第二轮就100%的准确了,验证集和测试数据都是100%。

model = GCN(in_size, 16, out_size).to(device)
epoches = 5
train(g, features, labels, masks, model, epoches)
acc = evaluate(g, features, labels, masks[2], model)
print("Test accuracy {:.4f}".format(acc))

调整下函数,让测试集直接输出概率

def predict(g, features, labels, mask, model):
    model.eval()
    with torch.no_grad():
        logits = model(g, features)
        logits = logits[mask]
        labels = labels[mask]
        probabilities = F.softmax(logits, dim=1) 
        return probabilities
    
predict(g, features, labels, masks[2], model)

        测试集是0和11两个样本,0号样本是黑样本的概率为0.8335,11号样本为白样本的概率为0.6135。其中“wc的小店”作为孤立节点,特征和黑样本相似,也是预测概率蛮高的,所以图NN,对于孤立节点也是有很好的学习能力,不一定是一定都要构成图。

ST-GCN demo运行记录 Pytorch已经下载完成,需要下载其他的python库 打开requirements.txt文件所在文件夹,使用cmd,输入pip install语句: 使用pip list语句可以查询已下载的python库: 根据作者给出的readme文件,接下来是installation,首先是使用cmd,输入cd <torchlight文件的目录>(进入到torchlight文件夹中);然后输入python setup.py install,运行这个.py文件;cd.... 阅读详情

相关推荐

【图基础】PyG框架demo:使用GCN完成Core数据集分类【代码+数据集】

这篇博客简单介绍了PyG以及Core数据集,并用一个简单的两层GCN实现了Core分类。

vector的博客 2777

GCN的demo

GCN的demo

Ling_Ze的博客 477

GCN graph convolutional networks 详解

首先要充分了解卷积: 然后再看graph上 图摘自 https://download.youkuaiyun.com/download/guotong1988/10635690

开卷有益 7773

在NLP中应用GCN的几种构图方法整理

1. 基于 word 和 文档(document) 的构图 AAAI2019: Graph Convolutional Networks for Text Classification 节点: words, documents 边: 基于 PMI 值构图 word与document之间边权重: word在document中的tf-idf值 word之间的边权重: PMI PMI...

carrie_0307的博客 3419

IntelliJ IDEA 2025.1 + Gradle 镜像配置避坑指南:解决依赖下载慢的终极方案

本文针对IntelliJ IDEA 2025.1开发环境中Gradle依赖下载缓慢的问题,提供了详细的镜像配置避坑指南。通过解析Gradle依赖解析机制,重点指导如何正确配置阿里云等国内镜像仓库,并分享验证配置生效、排查常见错误及高级优化技巧,旨在彻底解决依赖下载难题,提升开发效率。

weixin_28835551的博客 532

什么是 WhatsApp云控 WhatsApp群发,WhatsApp协议,他们有什么区别?

下面我们sensws讲解下什么是WhatsApp云控 WhatsApp群发,WhatsApp协议

sendws的博客 3875

【PyG】理解MessagePassing过程,GCN demo详解

文章目录PyG的信息传递机制MessagePassing ClassGCN demo1. 导入头文件2. 构造函数3. 前向传播forward4. message5. aggregate6. update完整GCN demo代码 参考: PyG利用MessagePassing实现GCN(了解pyG的底层逻辑) PyG官方demo GCN PyG的信息传递机制 PyG提供了**信息传递(邻居聚合)**操作的框架模型。 xik=γk(xik−1,□j∈N(i)ϕ(xik−1,xjk−1,ej,i)) x_i

LittleSeedling的博客 1553

Power BI Report Server自定义登录实战:从AD切换到Form的完整流程(附GitHub源码)

本文详细介绍了如何将Power BI Report Server的登录认证从Active Directory切换到自定义Form认证的完整流程。通过环境准备、认证模块编译、配置脚本修改等步骤,帮助用户实现品牌统一的登录界面和简化外部用户访问。附有GitHub源码,适用于需要个性化登录解决方案的企业。

pz890123456的博客 210

图卷积网络实践:如何构建高效的图神经网络

1.背景介绍 图卷积网络(Graph Convolutional Networks,GCN)是一种深度学习模型,专门处理非 Euclidean 空间上的数据,如图结构数据。图卷积网络在图上进行卷积操作,可以自动学习图结构的特征表示,从而实现图上的特征提取和分类。在近年来,图卷积网络在图分类、图嵌入、社交网络、知识图谱等领域取得了显著的成果。 在这篇文章中,我们将从以下几个方面进行深入探讨: ...

AI天才研究院 1456

手把手教你用Kokoro-82M-v1.1-zh搭建本地TTS服务(含WebSocket接口)

本文详细介绍了如何使用Kokoro-82M-v1.1-zh模型搭建本地TTS服务,包括环境配置、模型部署、WebSocket接口实现及性能优化。通过实战指南,开发者可以快速掌握本地部署TTS系统的关键技术,提升语音交互应用的开发效率。

weixin_30776273的博客 184

告别单一查询!MultiQueryRetriever在LangChain中的高级用法解析

本文深入解析了LangChain中的MultiQueryRetriever高级用法,该工具通过大语言模型自动生成多样化查询,显著提升文档检索的召回率和准确性。文章详细介绍了其核心机制、高级配置调优策略以及在多语言和专业领域中的实际应用,为开发者提供了优化知识库问答系统的实用方案。

weixin_28730927的博客 271

GCN入门理解

图是信息的最佳表示方式。在一个图中,有通过边(谓之“关系”)连接起来的节点(谓之“实体”)。想一想,你的Facebook社交网络是个什么样子的:以你为中心连接上你的朋友们,他们又以不同的方式相互联系。在表格中表示这些信息的方式是有些随意(或者不好的),社交关系并不是像一排排规矩的摆在桌子上的东西,而是像下图这样的: Facebook 社交网络;金色的边你的社交关系;灰色的边是你的朋友之间的关...

weixin_30468137的博客 1872

YOLOv12 改进 | Backbone改进 3

将CSP中的简单拼接改为可学习的特征选择门控,动态决定哪些特征流向下一层,同样再写这篇。:相比静态CSP的固定50/50分割,门控机制可学习0.3:0.7等最优比例。在输入端加入轻量SR模块,对下采样后的特征进行超分恢复,提升小目标检测能力。(小目标): 从 0.51 AP → 0.63 AP (+24%):采用ESPCN的高效亚像素卷积,避免传统插值的信息损失。:从通道级(SE)到空间级(Spatial)的多粒度控制。:结合浅层细节和深层语义,恢复小目标的纹理信息。

u012133341的博客 842

GCN(图卷积神经网络)详解

详细的GCN分析

一去不复返的通信er 8034

基于STM32、HAL库的MCP4651-503E/ST数字电位器驱动程序设计

@param channel: 通道 (0: A通道, 1: B通道)* @param channel: 通道 (0: A通道, 1: B通道)// SPI1 SCK/MISO/MOSI引脚配置。* @param hmcp: MCP4651句柄。* @param hmcp: MCP4651句柄。* @param hmcp: MCP4651句柄。* @param hmcp: MCP4651句柄。* @param hmcp: MCP4651句柄。* @param hspi: SPI句柄。

corlin6688的博客 137

MATLAB基础应用精讲-【图像处理】GNN图神经网络(附python代码实现)

图神经网络由于其在处理非欧空间数据和复杂特征方面的优势,受到广泛关注并应用于推荐系统、知识图谱、交通道路分析等场景。图结构可描述复杂关系,如基因结构、通信网络、交通路线、社交网络等。图计算挖掘结构信息,但无法学习节点特征。神经网络在欧氏空间数据上表现优越,但无法直接应用于非欧氏空间的图数据。图神经网络结合图计算和神经网络优势,处理非欧氏空间数据及其复杂特征,应用于网络链接预测、推荐系统和交通道路分析等场景。实际应用中,图数据规模庞大,如百亿级节点、千亿级边,存储开销超过10TB。

qq_36130719的博客 1140

ST-GCN源码运行demo配置过程(openpose-1.5.0+win10)

目录配置Openpose-1.5.0Openpose下载 本文中CUDA已安装,版本为11.2 CUDA版本在Nvidia控制面板-系统信息-组件-NVCUDA64.DLL产品名称栏中可以找到 配置Openpose-1.5.0 参考链接 Openpose1.5.0+VS2017+CUDA10+cuDNN7.5+WIN10安装部署教程(C++和Python API). win10+VS2017+openpose1.5.0+cuda10.0+cudnn7.5(GPU版,实现pythonAPI). Openpos

NekoTom的博客 5261

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ML-GCN(一)代码训练与运行

目的:运行并粗略看懂ML-GCN的代码。注:此代码为更改后的代码,结构与原来模型相差甚远。但代码结构大致相同。 代码地址:https://github.com/chenzhaomin123/ML_GCN 论文地址 https://arxiv.org/abs/1904.03582 目录 一、相关依赖项下载 1.1 程序及数据 1.2 数据集 1.3 放入对应位置 1.4 标注 an...

祥瑞的技术博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

浅析图卷积神经网络

今天想和大家分享的是图卷积神经网络。随着人工智能发展,很多人都听说过机器学习、深度学习、卷积神经网络这些概念。但图卷积神经网络,却不多人提起。那什么是图卷积神经网络呢?简单的来说就是其研究的对象是图数据(Graph),研究的模型是卷积神经网络。为什么有图卷积神经网络自2012年以来,深度学习在计算机视觉以及自然语言处理两个领域取得了巨大的成功。和传统方法相比,它好在哪里呢?假设有一张图,要做分类,...

geek_wh2016的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ML-GCN代码demo_voc2007_gcn相关注解

前言 对ML-GCN相关代码进行阅读,提升一下编程能力同时更加深入理解此篇文章 论文地址 代码地址 engine.py ```python import os import shutil import time import torch.backends.cudnn as cudnn import torch.nn.parallel import torch.optim import torch...

qq_44015059的博客 2416

图卷积神经网络GCN原理+图结构学习+GAT+VGAE

https://baijiahao.baidu.com/s?id=1678519457206249337&wfr=spider&for=pc GCN是一种卷积神经网络,它可以直接在图上工作,并利用图的结构信息。 GCN的基本思路:对于每个节点,我们从它的所有邻居节点处获取其特征信息,当然也包括它自身的特征。假设我们使用average()函数。我们将对所有的节点进行同样的操作。最后,我们将这些计算得到的平均值输入到神经网络中。 GCN的主要思想。我们以绿色节点为例。首先,我们取其所有邻居节点

cloudless_sky的博客 1万+

GCN学习笔记

很好的翻译:http://www.elecfans.com/rengongzhineng/603772.html 才发现自己翻译的太渣了,还花了很长时间,呜呜~全当练习英语了 In the last couple of years, a number of papers re-visited this problem of generalizing neural networks ...

weixin_30279315的博客 993

GCN (Graph Convolutional Network) 图卷积网络解析

目的:图卷积网络近两年大火,博主实习需要用到。接下来几个月就会在图卷积网络上做很多东西。这篇是刚开始对图卷积网络的学习,所以会广泛参考相关论文与网上的技术博客,总结归纳,希望提炼出有用的知识,加深对于图卷积网络的理解。重要内容链接会贴出方便大家学习,也很欢迎大家跟我探讨或者分享心得。对于复杂的公式与繁杂的推证,博主希望尽可能理解其意义,对于难以理解的或者暂时没有时间推证的可以先记下其结论,方便后续...

祥瑞的技术博客 8万+

浅谈GCN

GCN(Graph convolution Network)是Convets在图结构上的自然推广。卷积神经网络是采用局部感知区域、共享权值和空间域上的降采样,相对于位移、缩放和扭曲,具有稳定不变的特性,能够很好的提取图像的空间特征。图结构不具备图片的平移不变性,传统的卷积方式不适用于图结构。图中每个节点的邻域节点数目不一致,无法用同样尺寸的卷积核进行提取特。 而GCN的本质就是提取图的结构...

宁静致远 2万+

GCN

https://zhuanlan.zhihu.com/p/54320464 https://zhuanlan.zhihu.com/p/54505069 https://zhuanlan.zhihu.com/p/49258190 https://blog.youkuaiyun.com/chensi1995/article/details/77232019 https://www.zhihu.com/qu...

qq_41786778的博客 446
上一篇: GCNGCNGCN牛轰轰
下一篇: tuanhuo挖掘 or Embedding 简介
MusicDancing
博客等级 码龄7年 2684粉丝 314原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值