GAN(图卷积网络)的Pytorch实现

GAN(图卷积⽹络)的Pytorch实现
import torch
as nn
functional as F
import networkx as nx
def normalize(A , symmetric=True):
# A = A+I
A = A + (A.size(0))
# 所有节点的度
d = A.sum(1)
if symmetric:
#D = D^-1/2
D = torch.diag(torch.pow(d , -0.5))
过氧化氢浓度测定
(A).mm(D)
else :
# D=D^-1
D =torch.diag(torch.pow(d,-1))
(A)
class GCN(nn.Module):
取样方法
'''
Z = AXW
'''
def __init__(self , A, dim_in , dim_out):
微波功率放大器
super(GCN,self).__init__()
self.A = A
self.fc1 = nn.Linear(dim_in ,dim_in,bias=False)
self.fc2 = nn.Linear(dim_in,dim_in//2,bias=False)
vobuself.fc3 = nn.Linear(dim_in//2,dim_out,bias=False)
def forward(self,X):
'''
计算三层gcn
'''
X = F.relu(self.fc1((X)))
X = F.relu(self.fc2((X)))
return self.fc3((X))
#获得空⼿道俱乐部数据
G = nx.karate_club_graph()
A = nx.adjacency_matrix(G).todense()
#A需要正规化食品电烤箱
A_normed = normalize(torch.FloatTensor(A),True)
N = len(A)
X_dim = N
# 没有节点的特征,简单⽤⼀个单位矩阵表⽰所有节点
X = (N,X_dim)
# 正确结果
Y = s(N,1).long()
# 计算loss的时候要去掉没有标记样本
Y_mask = s(N,1,dtype=torch.uint8)
# ⼀个分类给⼀个样本
Y[0][0]=0
Y[N-1][0]=1
#有样本的地⽅设置为1
Y_mask[0][0]=1
Y_mask[N-1][0]=1
#真实的空⼿道俱乐部的分类数据
Real = s(34 , dtype=torch.long)
for i in [1,2,3,4,5,6,7,8,11,12,13,14,17,18,20,22] :
Real[i-1] = 0
for i in [9,10,15,16,19,21,23,24,25,26,27,28,29,30,31,32,33,34] : Real[i-1] = 1
# 我们的GCN模型
gcn = GCN(A_normed ,X_dim,2)
#选择adam优化器
gd = torch.optim.Adam(gcn.parameters())
for i in range(300):
#转换到概率空间
y_pred =F.softmax(gcn(X),dim=1)
键盘刷#下⾯两⾏计算cross entropy
loss = (-y_pred.log().gather(1,Y.view(-1,1)))
#仅保留有标记的样本
loss = loss.masked_select(Y_mask).mean()
#梯度下降
#清空前⾯的导数缓存
<_grad()
#求导
loss.backward()
#⼀步更新
gd.step()
if i%20==0 :
_,mi = y_pred.max(1)
print(mi)
#计算精确度
print((mi == Real).float().mean())

本文发布于:2024-09-24 09:22:31,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/230000.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:样本   没有   标记   俱乐部   时候   去掉   过氧化氢
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议