IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 关于pyGCN的理解 -> 正文阅读

[人工智能]关于pyGCN的理解

代码

数据集CORA

组成
    2708 paper 
    1433 features 
        1433个词,不包含词频小于10的词
    7 laber
    	Case_Based
		Genetic_Algorithms
		Neural_Networks
		Probabilistic_Methods
		Reinforcement_Learning
		Rule_Learning
		Theory

cora.content
    节点信息
    <paper_id> <word_attributes>+ <class_label>
     例子
        31336	(0 or 1)*1433	Neural_Networks
cora.cites
    节点关系
    <ID of cited paper> <ID of citing paper>
    paper2->paper1
    例子
        35	1033 
        ID为35的论文 被 ID为1033的论文引用 

GCN更多信息

http://tkipf.github.io/graph-convolutional-networks/

train.py中的参数

no-cuda
    不使用显卡
fastmode
    每个epoch训练完之后,测试
seed!
    manual_seed
    是一个随机数种子,主要就是为了固定结果,它会让你初始化结果一样,这样的话最终结果就一样了
epochs
    训练的次数
lr
    设置优化器的lr学习率
weight_decay!
    设置优化器的权重衰减(L2 参数损失)
hidden
    隐藏层的特征维度
dropout
    防止过拟合

对应的参数计算对应公式


归一化的 A+I_N = 归一化 \widetilde{A} = \widehat{A} = \widetilde{D}^{-\frac{1}{2}}\widetilde{A}\widetilde{D}^{-\frac{1}{2}}
     adj = array([[0.16666667, 0.        , 0.        , ..., 0.        , 0.        ,
                    0.        ],
                   [0.        , 0.5       , 0.        , ..., 0.        , 0.        ,
                    0.        ],
                   [0.        , 0.        , 0.2       , ..., 0.        , 0.        ,
                    0.        ],
                   ...,
                   [0.        , 0.        , 0.        , ..., 0.2       , 0.        ,
                    0.        ],
                   [0.        , 0.        , 0.        , ..., 0.        , 0.2       ,
                    0.        ],
                   [0.        , 0.        , 0.        , ..., 0.        , 0.        ,
                    0.25      ]])
H^0 = X 归一化的结点的特征集
    features 2708*1433 每个结点有1433个特征

labels 结点的标签
    labels 2708*1 每个结点有一个label 例如 0 表示 Case_Based

idx 结点原始ID 2708
    35      163	
    1033    402

edges 
    边的形式 
        被引用结点原始ID对应的索引163 引用结点原始ID对应的索引402 

公式9 
GCN模型
    def forward(self, x, adj): # 公式9
        x = self.gc1(x, adj) # 2708 * 16
        x = F.relu(x)
        x = F.dropout(x, self.dropout, training=self.training) # 防止过拟合
        x = self.gc2(x, adj)
        x = F.log_softmax(x, dim=1)
        return x

self.gc1(x, adj)
    使用
        def forward(self, input, adj):
        support = torch.mm(input, self.weight)  # GraphConvolution forward。input*weight = H * W
        output = torch.spmm(adj, support)  # adj = \widehat{A}, support = H * W
        if self.bias is not None:
            return output + self.bias
        else:
            return output
    参数
        H^0 = X, 
        adj = \widehat{A}
        W_0 = weights  torch.Size([1433, 16])
                tensor([[ 0.1911,  0.2075, -0.0586,  ...,  0.0339,  0.1205, -0.0353],
                [ 0.1927,  0.0370, -0.1167,  ..., -0.2469,  0.2258, -0.2124],
                [ 0.1930,  0.0416, -0.0812,  ..., -0.1093,  0.1443,  0.0447],
                ...,
                [ 0.1707,  0.2397,  0.0111,  ...,  0.1867, -0.1786, -0.2166],
                [ 0.0162,  0.0835,  0.0571,  ...,  0.2088,  0.1388, -0.1208],
                [-0.0173, -0.2395,  0.0652,  ..., -0.0162, -0.1948,  0.0027]],
               requires_grad=True)
    
        hideen = 16
        bias = tensor([-0.2232, -0.0295, -0.1387,  0.2170, -0.1749, -0.1551,  0.1056, -0.1860,
                    -0.0666, -0.1327,  0.0212,  0.1587,  0.2496, -0.0154, -0.1683,  0.0151],
                   requires_grad=True)
    意义
        是 \widehat{A} * H^0 *  W_0 = [2708,1433]
    

Q&A

关于优化器 自适应矩估计(adaptive moment estimation)

https://pytorch.org/docs/stable/generated/torch.optim.Adam.html?highlight=adam#torch.optim.Adam

参数
    params (iterable) 
        – 可迭代的参数 以优化或 dicts 定义 参数组
    lr (float, optional) 
        – 学习率 (default: 1e-3)
    betas (Tuple[float, float], optional) 
        – 用于计算梯度及其平方的运行平均值的系数(默认值:(0.9,0.999))
    eps (float, optional) 
        – 项 添加到 分母以提高数值稳定性(默认值:1e-8)
    weight_decay (float, optional) 
        – 权重衰减(L2正则化项)的权重因子(默认值:0)
    amsgrad (boolean, optional) 
        – 是否使用论文 On the Convergence of Adam and Beyond 中的该算法的 AMSGrad 变体(默认值:False)
    maximize (bool, optional)
        – 根据目标最大化参数,而不是最小化(默认值:False)

关于优化器 中的weight_decay


定义
    在损失函数中,weight_decay是放在正则项(regularization)前面的一个系数,
    正则项一般指示模型的复杂度,
    若weight_decay很大,则复杂的模型损失函数的值也就大。


作用
    调节模型复杂度对损失函数的影响,防止过拟合
    L2 Regularization = weight decay(权重衰减)
    L2范数正则化又叫权重衰减。权重衰减通过惩罚绝对值较大的模型参数为需要学习的模型增加了限制,防止过拟合


关于误差

误差=偏差+方差+噪声之和;
偏差Bias
    度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;
方差Variance
    度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;
        高方差,也就是过拟合现象
噪声Noise
    则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界;

关于seed的使用

code:
    args.seed = 42
    torch.manual_seed(args.seed) # 固定随机出现的结果
    for i in range(100):
        print(torch.rand(args.seed)) 

output:
    tensor([0.2110, 0.2774, 0.3902, 0.1116, 0.3451, 0.4116, 0.5040, 0.8055, 0.0257,
            0.9064, 0.4957, 0.1972, 0.5427, 0.0463, 0.0589, 0.4129, 0.0712, 0.7272,
            0.9034, 0.2796, 0.3256, 0.4319, 0.1392, 0.7334, 0.6037, 0.4484, 0.1026,
            0.8229, 0.9346, 0.2459, 0.2079, 0.4565, 0.1011, 0.8485, 0.1555, 0.2057,
            0.4573, 0.5372, 0.6468, 0.2077, 0.7972, 0.0364])
    tensor([0.8745, 0.2766, 0.9558, 0.9277, 0.8983, 0.0385, 0.3283, 0.9134, 0.8288,
            0.3350, 0.8755, 0.9949, 0.0481, 0.8819, 0.7185, 0.9360, 0.0205, 0.8779,
            0.9743, 0.2788, 0.9718, 0.8809, 0.8837, 0.1761, 0.8711, 0.1745, 0.5796,
            0.1464, 0.8071, 0.2951, 0.7301, 0.5666, 0.9747, 0.7516, 0.7836, 0.3144,
            0.5695, 0.5139, 0.9900, 0.9229, 0.1805, 0.5648])

##关于pyGCN中的归一化

论文中使用的 归一化  -Symmetric normailzed Laplacian
    名称  对称归一化的拉普拉斯矩阵
    \widetilde{D}^{-\frac{1}{2}}
    \widetilde{A} \widetilde{D}^{-\frac{1}{2}}
    对称矩阵

代码中使用的 简单的 归一化
    名称 随机游走的归一化的拉普拉斯矩阵 -Random walk normailzed Laplacian
    \widetilde{D}^(-1) * \widetilde{A}
    非对称矩阵

解释
    在代码中
    adj是对称的矩阵 乘以 D^(-1) 进行归一化 还是对称矩阵    
    feature不一定是对称的矩阵 乘以 D^(-1) 进行归一化 不一定是对称矩阵
    两种方法等效  

关于pyGCN中使用的损失函数

pyGCN中使用的
    nll_loss()

论文中使用
    nn.CrossEntropyLoss
    nn.functional.cross_entropy

原因
    CrossEntropyLoss()=log_softmax() + NLLLoss()

    NLLLoss的输入是一个对数概率向量和一个目标标签.
    它不会为我们计算对数概率.
    适合网络的最后一层是log_ _softmax. 
    损失函数  nn.CrossEntropyLoss()与NLLLoss()相同,唯一-的不同是 它为我们去做softmax.

注意
    链接:https://www.zhihu.com/question/66782101/answer/579393790
    nn.functional.xxx是函数接口,而nn.Xxx是nn.functional.xxx的类封装,
    nn.Xxx和nn.functional.xxx的实际功能是相同的,
    运行效率也是近乎相同。



##关于[:, 1:-1],[i, :],[:, 0],[:, -1]

import numpy as np
X = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11],[12,13,14,15]])  # 定义二维数组
print(X[:,0])  # 取数组X 二维数组中每一个的0号下标对应的值 [0 4 8 12]
print(X[1,:])  # 取数组X一维数组中的第一组全部数值  [0 1 2 3]
print(X[:,1:3])  # 取所有数据的第1列到3-1列数据,从第0列开始计算,结果如下:
'''
[[1 2]
 [5 6]
 [9 10]
 [13 14]]
'''

##关于两层隐藏层
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qEVgYO4F-1651928093995)(figure.png)]

训练集、验证集和测试集,

这三个集合不能有交集,常见的比例是8:1:1
训练集
    训练集用来训练模型,即确定模型的权重和偏置这些参数,通常我们称这些参数为学习参数。

验证集
    用于模型的选择,不参与学习参数的确定,
    没有参与梯度下降的过程。为了选择超参数,比如网络层数、网络节点数、迭代次数、学习率这些都叫超参数。
    比如在k-NN算法中,k值就是一个超参数。所以可以使用验证集来求出误差率最小的k。
测试集
    而仅仅使用于模型的评价。
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:39:40  更:2022-05-09 12:45:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:22:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码