2024-03-29
下午B站视频
新电脑必装软件(这种视频看了好多了 不知道为什么现在还是对这种视频感兴趣)
- wallpaper壁纸引擎
- boardmix博斯白板
- potplayer播放器
- 联想应用商店
- windows安装中心(电脑自带)
mac平台arc浏览器
mpv视频播放器
视频剪辑-剪映 或者camtasia
tingpng 图片无损压缩 网页版本有上传大小限制 // github上搜索tinyGUI突破尺寸限制
素材管理软件eagle
手机投屏到windows使用airserver/letsview
视频多平台发布 蚁小二/易媒助手
即时设计 轻量的ps软件
视频批量处理压缩 小丸工具箱
图片处理 光影魔术手
数据采集 | 爬虫 后羿采集器/八爪鱼数据采集器
软件卸载 geek软件/iobit
win运行安卓模拟 雷电模拟器
文本编辑 notepad++
提高电脑工作效率 hiddenX | 一键隐藏
电脑远程连接 todesk和向日葵
larry视频
【一】深度学习模块缝合(维度转换)
四维(b,c,h,w) 图像
三维(B,N,C)在NLP中 这个B是batch,N可能是序列长度,C可能是特征维度
# 把一个四维转换为三维 这种方法简单些
import torch
x = torch.rand(10,3,32,32) # bchw
print(x.shape)
# 转换为BNC
b,c,h,w = x.size() # 提取维度
out = x.view(b,h*w,c)
print(out.shape)
# 把一个四维转换为三维
import torch
x = torch.rand(10,3,32,32) # bchw转换为BNC
print(x.shape)
x_out = x.permute(0,2,3,1)
x_out.flatten(start_dim=1,end_dim=2) # 直接使用flatten()是会转变为1维 但是可以参数指定哪里开始展平
print(x_out)
- 缝模块都是在初始化和前向传播那块进行修改
# 4 → 3 → 4
def __init__(nn.Module):
...
self.art = aft... # 一个三维模块 新添加的
def forward(self,x):
# print(x.shape) 在前向传播中查看形状
B,C,H,W = x.size()
x_reshape = x.view(B,C*H,W)
# view(-1,xx) 这个-1是自己计算维度
x = self.art(x_reshape)
B,N,C = x.size() # 其实这行代码可有可无
x = x.view(B,C,H,W)
... # 四维前向转播原代码
...
【二】论文写好投稿,小白投稿
投稿论文:期刊论文和会议论文
中文:(类似于出版商 很多期刊收录于某个核心下面)
CSCD
北大核心
南大核心
科技核心
- 中文可以网上搜索如:北大核心有哪些 然后自己去找对应的期刊按官网步骤投稿
英文:
SCI(中科院分区和JCR分区 | 国内大多是用的中科院分区)
EI (期刊、会议 一般比较水)
letpub网站(其实组内有人分享过这个网站) 最新SCI期刊影响因子查询及投稿分析系统(2022-2023年)- LetPub
letpub网站中 OA是指开源是作者给钱 不开源是下载的人给钱
注意好好看作者须知 好好看期刊要求的格式
图小狮视频
【图神经网络改进:第三期 上-下】
- 节点分类 => 预测节点的类别 生成节点分类
- 链路预测 => 预测节点之间是否有关系
# 简单运行节点预测代码结果
(graph) C:\Users\le_xiong\Documents\lxiong\研一下\2024组内\AttentiveSkin\B站视频代码\第三期视频:图神经网络下游任务-节点分类>python node_classification.py
Downloading https://github.com/kimiyoung/planetoid/raw/master/data/ind.cora.x
Downloading https://github.com/kimiyoung/planetoid/raw/master/data/ind.cora.tx
Downloading https://github.com/kimiyoung/planetoid/raw/master/data/ind.cora.allx
Downloading https://github.com/kimiyoung/planetoid/raw/master/data/ind.cora.y
Downloading https://github.com/kimiyoung/planetoid/raw/master/data/ind.cora.ty
Downloading https://github.com/kimiyoung/planetoid/raw/master/data/ind.cora.ally
Downloading https://github.com/kimiyoung/planetoid/raw/master/data/ind.cora.graph
Downloading https://github.com/kimiyoung/planetoid/raw/master/data/ind.cora.test.index
Processing...
Done!
Data(x=[2708, 1433], edge_index=[2, 10556], y=[2708], train_mask=[2708], val_mask=[2708], test_mask=[2708])
GNN(
(conv1): GCNConv(1433, 32)
(conv2): GCNConv(32, 7)
)
Loaded Cora dataset with 2708 nodes and 10556 edges.
Epoch: [001/200], Loss: 1.9464, Train: 0.2000, Val: 0.1800, Test: 0.1640
Epoch: [002/200], Loss: 1.9403, Train: 0.3357, Val: 0.2160, Test: 0.2180
Epoch: [003/200], Loss: 1.9319, Train: 0.7000, Val: 0.4740, Test: 0.5070
Epoch: [004/200], Loss: 1.9199, Train: 0.8643, Val: 0.6160, Test: 0.6310
Epoch: [005/200], Loss: 1.9081, Train: 0.8357, Val: 0.6380, Test: 0.6620
Epoch: [006/200], Loss: 1.8948, Train: 0.8500, Val: 0.6680, Test: 0.6940
Epoch: [007/200], Loss: 1.8828, Train: 0.8857, Val: 0.7140, Test: 0.7360
Epoch: [008/200], Loss: 1.8645, Train: 0.9214, Val: 0.7560, Test: 0.7570
Epoch: [009/200], Loss: 1.8473, Train: 0.9214, Val: 0.7460, Test: 0.7560
---------------------------
Best Acc: 0.7560
---------------------------
2024-03-31 继续上面图小狮视频节点和链路预测 主要是链路预测代码理解
Ⅰ.链路预测中原始data数据集形状以及经过处理后tran、val、test数据集形状
Data(x=[2708, 1433], edge_index=[2, 10556], y=[2708], train_mask=[2708], val_mask=[2708], test_mask=[2708])
Data(x=[2708, 1433], edge_index=[2, 8976], y=[2708], train_mask=[2708], val_mask=[2708], test_mask=[2708], edge_label=[8976], edge_label_index=[2, 8976])
Data(x=[2708, 1433], edge_index=[2, 8976], y=[2708], train_mask=[2708], val_mask=[2708], test_mask=[2708], edge_label=[526], edge_label_index=[2, 526])
Data(x=[2708, 1433], edge_index=[2, 9502], y=[2708], train_mask=[2708], val_mask=[2708], test_mask=[2708], edge_label=[1054], edge_label_index=[2, 1054])
Ⅱ.链路预测的中的RandomLinkSplit
转变
用一个简化的例子来说明edge_index
、edge_label
和edge_label_index
三者之间的关系和它们是如何工作的,尤其是在通过RandomLinkSplit
转换后的训练、验证和测试数据集中
- 初始设置:
假设我们有一个小图,包含4个节点,节点之间的连接(即边)如下所示:
- 节点0和节点1之间有一条边。
- 节点1和节点2之间有一条边。
- 节点2和节点3之间有一条边。
如果我们以edge_index
的形式表示这些边,它可能看起来像这样:
edge_index = [[0, 1, 2], # 源节点索引
[1, 2, 3]] # 目标节点索引
这表示有三条边:0->1, 1->2, 2->3。
-
RandomLinkSplit
转换:
接下来,我们通过RandomLinkSplit
进行数据划分,假设划分结果如下:
- 训练集:包含边0->1和1->2,以及一个负样本边0->2(假设这个图中0和2之间没有直接的边,所以它被选作一个负样本)。
- 验证集:包含边2->3作为正样本,并且假设我们有一个负样本边0->3。
- 测试集:在这个例子中,让我们假设只用验证集,不使用测试集,以简化说明。
- 训练数据集:
对于训练集,我们可能有如下数据:
-
edge_index
仍然是原图的边索引,未改变。 -
edge_label_index
指示了哪些边被用于训练,包括正样本和负样本边。在我们的例子中,这将是:
注意这里包含了一个不存在的边0->2作为负样本。edge_label_index = [[0, 1, 0], # 源节点索引,包括负样本边0->2 [1, 2, 2]] # 目标节点索引
-
edge_label
表示这些边是正样本还是负样本。正样本标记为1,负样本标记为0。所以,对应于上面的edge_label_index
,我们可能有:edge_label = [1, 1, 0] # 前两条是正样本边,最后一条是负样本边
- 验证数据集:
对于验证集,假设有:
-
edge_label_index
指出哪些边用于验证,包括一个正样本边2->3和一个负样本边0->3:edge_label_index = [[2, 0], # 源节点索引 [3, 3]] # 目标节点索引
-
edge_label
相应地标记这些边:edge_label = [1, 0] # 第一条是正样本边,第二条是负样本边
- 关联性解释
-
edge_index
通常表示原图中所有的边。在使用RandomLinkSplit
后,它通常不变,因为转换主要通过edge_label_index
和edge_label
来定义用于训练、验证和测试的边及其性质(正样本或负样本)
用
neg_sampling_ratio
如果指定正负比例为1 这个负样本是随机生成的,负样本在原始图的边集合中不存在,同时要满足随机选取的条件,对于不同数据集也会避免重复假设原图中有N个节点,理论上节点间可能存在的边的总数为N(N−1)/2(对于无向图)或N(N−1)(对于有向图),取决于图是否有向。实际存在的边远少于这个数量,尤其是在稀疏图中,这就留下了大量的潜在边可以作为负样本
上面只是简单的randomlinksplit
函数的应用,关于这个函数自己仍然有很多不理解的地方:
①根据边随机划分时候,有时候并非选取所有的边进行划分,这到底是怎么个实现逻辑?
②负样本就是指本来不存在的边吗?
Ⅲ.边训练时候的思路步骤及一个简单例子
pos_out = out[edge_label_index[0], :] * out[edge_label_index[1], :]
pos_out = torch.sum(pos_out, dim=1)
loss = F.binary_cross_entropy_with_logits(pos_out, edge_label) # 二元交叉熵损失
# 运行一个简单测试 ty.py文件得到类似下面的结果
# 首先是假设一些输入的维度
out = [[1, 2], # 节点 0 的嵌入
[3, 4], # 节点 1 的嵌入
[5, 6], # 节点 2 的嵌入
[7, 8]] # 节点 3 的嵌入
edge_label_index = [[0, 2], # 节点 0 和节点 2 作为源节点
[1, 3]] # 节点 1 和节点 3 作为目标节点
edge_label = [0, 1]
edge_label_index[0] 为[0, 2]
out[edge_label_index[0], :]选取了源节点的嵌入,即节点0和节点2的嵌入:[[1, 2], [5, 6]]
out[edge_label_index[1], :]选取了目标节点的嵌入,即节点1和节点3的嵌入:[[3, 4], [7, 8]]
pos_out = [[ 3, 8],
[35, 48]]
pos_out tensor([11, 83])
Loss: tensor(5.5000)