GCN cora-network可视化

一、源码下载

Github下载地址:https://github.com/tkipf/gcn

您可以在以下模型之间进行选择:

  • gcn:图卷积网络
  • gcn_cheby:图卷积网络的Chebyshev多项式版本
  • dense:支持稀疏输入的基本多层感知器

框架还支持对每个具有邻接矩阵的多个图实例(可能具有不同的大小)进行批量分类。最好将各个特征矩阵连接起来,并建立一个(稀疏的)块对角矩阵,其中每个块对应一个图实例的邻接矩阵。对于池化(对于图级输出而不是节点级输出),最好指定一个简单的池化矩阵,该矩阵从各自的图实例中收集要素,如下所示:

[graph_classification
安装源码所需要的包,执行train.py文件

在这里插入图片描述

利用GCN完成节点分类任务的模型训练

二、节点分类可视化

进一步,利用 tsnegcn 的 outputs 进行可视化,观测是否能分成明显的7簇?

需要注意的是,要修改源代码,以将网络中节点的embedding 和 label输出出来。

  • 步骤一:修改 utils.py 的load_data()函数,将变量labels返回

    • return adj, features, y_train, y_val, y_test, train_mask, val_mask, test_mask, labels
  • 步骤二:修改 train.py 文件。首先修改输出out

    • outs = sess.run([model.opt_op, model.loss, model.accuracy, model.outputs], feed_dict=feed_dict)

    然后在训练完后添加如下代码段在这里插入图片描述

label_dict = {0:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6"} # 定义标签颜色字典
# 写文件
with open("./embeddings.txt", "w") as fe, open("./labels.txt", 'w') as fl:
    for i in range(len(outs[3])):
        fl.write(label_dict[int(list(labels[i]).index(1.))]+"\n")
        fe.write(" ".join(map(str, outs[3][i]))+"\n")

三、代码可视化

将分类后的结果在二维坐标上显示,所以我们要针对这个7个特征的数据进行PCA降维操作。

但是可视化效果不如参考的这篇博客的。

import matplotlib.pyplot as plt                 #加载matplotlib用于数据的可视化
from sklearn.decomposition import PCA           #加载PCA算法包

x, y= [], []
with open("labels.txt", "r") as f:  # 打开文件
    data1 = f.read().split("\n")  # 读取文件
    for i in data1:
        y.append(int(i))
with open("embeddings.txt", "r") as f:  # 打开文件
    data1 = f.read().split("\n")  # 读取文件
    for item in data1:
        a = []
        item1 = item.split(" ")
        for i in item1:
            a.append(float(i))
        x.append(a)

pca=PCA(n_components=2)     #加载PCA算法,设置降维后主成分数目为2
reduced_x=pca.fit_transform(x)#对样本进行降维
print(reduced_x)

# #可视化
color = ['#F0F8FF', 'green', 'b', 'r', '#7FFFD4', '#FFC0CB', '#00022e']
for index, item in enumerate(reduced_x):
    plt.scatter(item[0], item[1], c= color[y[index]])
plt.show()

在这里插入图片描述

img

参考博客: https://www.jianshu.com/p/47425c02d779

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐