1图的基础知识
1.1图的定义
1.2图的临界矩阵
1.3节点的度
1.4路径
已经在数据结构中学习过,不再重复
1.5行走(walk):一次行走的起始点+走过的边+结束点
1.6子图、连通图、连通子图:和高数上连通图的定义有异曲同工之处,就是单独可以成一个小区域。连通子图为子图的特殊型。
1.7直径:max min P ,P为节点间的路径长度。
其中关于图网络的介绍和优缺点相对容易理解,同时自己的
2配置环境
在环境配置过程中,自己的电脑是win10,所以在配置过程中出现了较大的问题。因为我提前安装过conda,并且配置可以使用,所以就用的conda终端进行的安装,期间出现以下问题
2.1cuda和工具包的安装
升级驱动,先去了cuda官网,然后查询了自己电脑GPU对用的驱动程序,更新到了新版本。(因为大部分是向下兼容的,所以较高的版本也能支持较低版本的torch,但是最好还是按照官方对应的版本来安装对应的torch)
2.2用conda虚拟环境进行安装
用conda虚拟环境进行安装参考链接
我起初是用最高的torch和cudatoolkit=11.2,同时用的清华源进行配置。中间torch包1.5G,还有一个依赖包要1.3G,中间发生了好几次断开链接。心态崩了。后来也尝试了一下用中科大的源,但是又失败了。迫于无奈,就降低了版本,用cudatoolkit=10.1进行安装,在等待了半个小时后,终于torch安装成功,在conda终端里可以使用。
2.3conda虚拟环境运用到jupyter notebook中
conda虚拟环境运用到jupyter notebook中参考链接
conda虚拟环境不能直接在jupyter notebook中使用,需要上面一些附加包。安装完毕后,重新运行jupyter notebook,创建对应的虚拟环境就行。
2.4pyg依赖包下载
pyg依赖包不能挂VPN下载就离谱???只能用-f指定源进行下载,当事人表示很无奈,也就几十兆的东西,10k/s的速度下载了半个小时???差不多,终于结束。然后用-i清华源下载了以下pyg。终于下载完毕。
3作业题
3.1继承
class Data(object):
def __init__(self, x=None, edge_index=None, edge_attr=None, y=None, **kwargs):
"""
Args:
x (Tensor, optional): 节点属性矩阵,大小为`[num_nodes, num_node_features]`
edge_index (LongTensor, optional): 边索引矩阵,大小为`[2, num_edges]`,第0行为尾节点,第1行为头节点,头指向尾
edge_attr (Tensor, optional): 边属性矩阵,大小为`[num_edges, num_edge_features]`
y (Tensor, optional): 节点或图的标签,任意大小(,其实也可以是边的标签)
"""
self.x = x
self.edge_index = edge_index
self.edge_attr = edge_attr
self.y = y
for key, item in kwargs.items():
if key == 'num_nodes':
self.__num_nodes__ = item
else:
self[key] = item
我是假设y是[num-node,num-class]的举证,比如节点i,对应j类,则y[ij]==1,否则等于0,然后得到每一类的个数。
3.2因为要用到model=model.to(device)
参考链接
但是由于,还不会创建良好的网络模型,所以自己没有将net()实例化。但是查到了一篇实例化的例子,同时看懂了代码。关键代码如下:
import torch.nn as nn
class Net1(nn.Module):
def __init__(self, in_dim, n_hidden_1, n_hidden_2, out_dim):
super(Net1, self).__init__()
self.layer1 = torch.nn.Sequential(nn.Linear(in_dim, n_hidden_1))
self.layer2 = torch.nn.Sequential(nn.Linear(n_hidden_1, n_hidden_2))
self.layer3 = torch.nn.Sequential(nn.Linear(n_hidden_2, out_dim))
def forward(self, x):
x1 = F.relu(self.layer1(x))
x1 = F.relu(self.layer2(x1))
x2 = self.layer3(x1)
print("\tIn Model: input size", x.size(),"output size", x2.size())
return x2
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
#实例化网络
model = Net1(13, 16, 32, 1)
if torch.cuda.device_count() > 1:
print("Let's use", torch.cuda.device_count(), "GPUs")
model = nn.DataParallel(model)
model.to(device)