首页 > 其他分享 >GCN知识总结

GCN知识总结

时间:2024-07-22 21:56:36浏览次数:20  
标签:总结 知识 labels edges GCN classes np adj 节点

关键点: 1.理解图结构的形式 2.如何使用邻接矩阵实现其图结构形式 3.GCN卷积是如何实现节点特征更新的 核心公式: 特征提取: 处理好的x 代表节点特征,然后*权重,再*邻接。 A尖换元后: forward函数 传播规则: loss: 1.数据处理有价值的代码: 对labels 列,进行 one hot 编码。 就是将 有限个 不管是什么类型的数据,用 不同顺序的01数表示出来。 def encode_onehot(labels):     classes = set(labels)     //for i,c in enumerate(classes):        // print(i,c)     classes_dict = {c: np.identity(len(classes))[i, :] for i, c in                     enumerate(classes)}     //print(classes_dict)     labels_onehot = np.array(list(map(classes_dict.get, labels)),                              dtype=np.int32)     return labels_onehot labels = encode_onehot(idx_features_labels[:, -1]) 还能把1的位置转换成一维的 labels = torch.LongTensor(np.where(labels)[1]) 同理,给了很杂乱的 结点input,可以用 dic去编码。{原label:现label} idx = np.array(idx_features_labels[:, 0], dtype=np.int32) idx_map = {j: i for i, j in enumerate(idx)} 随后用编码过的节点,去 编码边 edges_unordered = 边数据 edges = np.array(list(map(idx_map.get, edges_unordered.flatten())),dtype=np.int32).reshape(edges_unordered.shape) 给了边  构建 邻接矩阵且为稀疏矩阵 adj = sp.coo_matrix((np.ones(edges.shape[0]), (edges[:, 0], edges[:, 1])),                         shape=(labels.shape[0], labels.shape[0]),                         dtype=np.float32) print(adj) 计算转置矩阵将 有向图转化为无向图 adj = adj + adj.T.multiply(adj.T > adj) - adj.multiply(adj.T > adj) 归一化函数 def normalize(mx):     rowsum = np.array(mx.sum(1)) #矩阵行求和     r_inv = np.power(rowsum, -1).flatten() ##求和的倒数     r_inv[np.isinf(r_inv)] = 0.#由于原本为0的数求倒数后可能会产生极大值,这里设置极大值为0     r_mat_inv = sp.diags(r_inv) ##构造对角线矩阵     mx = r_mat_inv.dot(mx)     return mx adj = normalize(adj + sp.eye(adj.shape[0])) #对应论文中公式,加上了I矩阵 这种归一化方式,将不再单单地对领域节特征点取平均,它不仅 考虑了节点i ii的 ,也考虑了邻接节点j jj的度, 当邻居节点 j jj 度数较大时,它在聚合时贡献地会更少 2.缺点: 第一,GCN需要将整个图放到内存和显存,这将非常耗内存和显存,处理不了大图; 第二,GCN在训练时需要知道整个图的结构信息(包括待预测的节点), 这在现实某些任务中也不能实现(比如用今天训练的图模型预测明天的数据,那么明天的节点是拿不到的)。

标签:总结,知识,labels,edges,GCN,classes,np,adj,节点
From: https://blog.csdn.net/weixin_74152658/article/details/140620669

相关文章

  • C语言指针易混淆知识点总结
    指针定义指针是一个变量,存储另一个变量的内存地址,它允许直接访问和操作内存中的数据,使得程序能够以更灵活和高效的方式处理数据和内存。获取变量地址:使用取地址符&。访问地址上的数据:使用解引用符*。例子1指针是存储另一个变量地址的变量。通过使用取地址符&和解引用符......
  • 7.22日今日总结之CRC8校验
    今日学习通讯协议时,发现客户的数据采用了CRC8校验,之前用的都是和校验或者异或校验,头次使用CRC8校验,因此上网查阅资料学习了一下。CRC8校验一般使用的多项式为X8+X2+X1+1CRC8算法是通过对数据进行模2除法运算来计算余数,也称异或运算,然后将余数附加到原始数据后面,形成被校验的数据......
  • 7/22 课堂知识点总结
    斐波那契数列解法用数组来一个一个寸为什么不用递归?递归层数太多,容易爆栈系统栈:2mb一般的递归层数:2*\(10^4\)//正常解法for(inti=3;i<=n;i++)a[i]=a[i-1]+a[i-2];时间复杂度:O(n).//递归解法intf(intx){if(x==1||x==2)re......
  • kafka 基础知识
    1、Kafka简介ApacheKafka是由Apache开发的一种发布订阅消息系统。Kafka是一个分布式的基于发布/订阅模式的消息队列(MessageQueue),主要应用于大数据实时处理领域。发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感......
  • c++零基础知识要点整理(7)
    *请搭配c++零基础知识要点整理(5)使用位或运算符的应用: | (有1即1)1.设置标记位(使某一个位置的值变为1)inta=0b101101;//(以使第五位变为1举例,即使a变为:0b11101)cout<<(a|0b10000)<<endl;//要使第五个位置的值变为1,则将这个数和0b10000进行位或//以此类推:需要使第四个......
  • HTML笔记总结(Xmind格式):第一天
    Xmind鸟瞰图:简单文字总结:笔记总结:1.常用开发工具:VScode,Hbuilder,IDEA2.常见浏览器:IE,火狐(Firefox),谷歌(chrome),Safari3.Web标准:结构标准,表现标准,行为标准4.HTML的全称为超文本标记语言5.排版标签有:标题标签,段落标签,水平线标签,换行标签,div标签,span标签6.标题标签的特点: ......
  • JavaScript笔记总结(Xmind格式):第一天
    Xmind鸟瞰图:简单文字总结:js使用方法:        1.行内样式(需要特定条件才可以使用)        2.内部样式(script尽量写在body最下面)        3.外部样式(在script标签中通过src引入外部的js文件)window对象的方法(window可以省略):        1.alert......
  • JavaScript笔记总结(Xmind格式):第二天
    Xmind鸟瞰图:简单文字总结:数据类型检测:可以使用typeof检测数据类型数据类型转换:  1.其它类型转换为Boolearn    ①数字类型转换Boolean:只有0会被转换为false,其它的非0数字都会转换为true    ②字符串类型转换为Boolean:只有空字符串会被转换为false,......
  • JavaScript笔记总结(Xmind格式):第三天
    Xmind鸟瞰图:简单文字总结:数组的创建:  1.数组的特性:    ①数组中,可以添加任意的数据类型    ②数组是一个对象,属于复杂数据类型    ③直接创建的数组可以在中间添加空值    ④构造函数创建的数据不可以添加空值,会直接报错  2.......
  • 数据结构与算法总结——线性表
    目录2线性表2.1线性表的定义2.2线性表的基本操作2.2顺序表2.2.1顺序表的定义2.2.2顺序表的基本操作2.3链式表2.3.1链表的定义2.3.2链表的分类2.3.3单向链表2.3.3.1结点设计2.3.3.2链表的初始化2.3.3.3数据的插入2.3.3.4数据的删除2.3.3.5销毁链......