当前位置: 首页 > news >正文

图神经网络入门代码(2)-逐行分析

逐行详解 GnnLayer 的 __init__ 方法​


​1. 类定义与初始化参数​

import torch
import torch.nn as nnclass GnnLayer(nn.Module):def __init__(self, in_feats, out_feats, neighbr, bias=False, activation=False):super(GnnLayer, self).__init__()
  • ​作用​​:定义一个自定义的图神经网络层,继承自PyTorch的nn.Module

  • ​参数​​:

    • in_feats:输入特征的维度(例如每个节点的特征向量长度)。

    • out_feats:输出特征的维度(经过该层后的特征向量长度)。

    • neighbr:每个节点的最大邻居数(用于权重矩阵维度计算)。

    • bias:是否在层中添加可学习的偏置项(True表示添加)。

    • activation:是否在该层后使用激活函数(True表示使用)。

​2. 参数存储与变量初始化​

        self.in_feats = in_featsself.out_feats = out_featsself.neighbor = neighbrself.activation = activationself.weight = nn.Parameter(torch.FloatTensor(size=(neighbr*in_feats, out_feats)))self.bias_bool = bias# define the network inside the nodesself.relu = nn.LeakyReLU()
  • ​作用​​:将输入参数保存为类的成员变量,供后续使用。定义一个可学习的权重矩阵,用于对聚合后的邻居特征进行线性变换。

  • ​示例​​:

    • 若 in_feats=5out_feats=16neighbr=2,则该层会将每个节点的5维特征,结合2个邻居的信息,映射到16维特征。

    • 权重矩阵的形状为 (neighbr * in_feats, out_feats)

    • ​偏置项 (bias_bool)​​:

      • 若 bias=True,则在该层中添加一个可学习的偏置向量,用于调整线性变换后的输出。

      • 偏置的作用:允许模型学习输出值的偏移,增强拟合能力。

    • ​激活函数 (relu)​​:

      • LeakyReLU 是一种非线性激活函数,其中,x小于0时,α 是一个小斜率(默认0.01),避免负数输入时梯度为零。

      • ​作用​​:引入非线性,使模型能够学习复杂的特征映射。

 

3. 权重与偏置的初始化​
        if activation:self.activation = activationnn.init.xavier_uniform_(self.weight, gain=nn.init.calculate_gain('relu'))if bias:self.bias = nn.Parameter(torch.FloatTensor(size=(1, self.out_feats)))nn.init.xavier_uniform_(self.bias, gain=nn.init.calculate_gain('relu'))else:if bias:self.bias = nn.Parameter(torch.FloatTensor(size=(1, self.out_feats)))nn.init.xavier_uniform_(self.bias)nn.init.xavier_uniform_(self.weight)
  • ​初始化逻辑​​:

    1. ​当使用激活函数时 (activation=True)​​:

      • ​权重初始化​​:使用Xavier均匀初始化,并根据relu的增益(gain)调整初始化范围,以缓解梯度消失问题。

        • Xavier初始化的目标是保持输入和输出的方差一致。

        • gain=nn.init.calculate_gain('relu') 根据激活函数类型调整增益值(对ReLU增益为2​)。

      • ​偏置初始化​​:如果启用偏置,同样使用Xavier均匀初始化。

    2. ​当不使用激活函数时 (activation=False)​​:

      • ​权重初始化​​:仅使用标准Xavier均匀初始化。

      • ​偏置初始化​​:如果启用偏置,初始化方式同上。

  • ​代码细节​​:

    • nn.Parameter:将张量标记为可学习参数,自动加入模型参数列表。

    • nn.init.xavier_uniform_:按Xavier均匀分布初始化张量。

相关文章:

  • Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(二)
  • 7系列fpga在线升级和跳转
  • LINUX 416 路由转发1
  • 计算机视觉与深度学习 | 图像特征点提取算法及匹配算法综述
  • 使用 tcpdump 工具,捕获并分析
  • 照片处理工具:基于HTML与JavaScript实现详解
  • 实验三 I/O地址译码
  • c++原子操作
  • Day09 【基于LSTM实现文本加标点的任务】
  • # 手写数字识别:使用PyTorch构建MNIST分类器
  • AI赋能智能经营:全球关税战下的可持续发展之道
  • 2000-2019年各省城市液化石油气用气人口数据
  • 人工智能概念股投资:10大潜力标的深度研究
  • AutoDL上Xinference安装
  • JVM-基于Hotspot
  • JVM 调优不再难:AI 工具自动生成内存优化方案
  • 【bash】.bashrc
  • PhotoShop学习10
  • 分享:批量提取图片文字并自动命名文件,ocr识别图片指定区域并重命名文件名工具,基于WPF和腾讯OCR识别的接口的视线方案
  • 数据库ALGORITHM = INSTANT研究过程
  • 企业网站建设策划书方案范文/昆明seo关键字推广
  • 外贸网站屏蔽国内ip/今日特大新闻新事
  • 企业建网站作用/百度爱采购优化排名软件
  • 寿光专业做网站的公司/西安优化排名推广
  • 椒江网站建设578做网站/seow
  • 企业门户网站开发代码/大连seo网站推广