怎样使用Keras和Tensorflow学习图形数据

这篇文章给大家介绍怎样使用Keras和Tensorflow学习图形数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

成都创新互联公司长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为仪陇企业提供专业的网站设计、网站建设,仪陇网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。

动机:

有很多数据可以在实际应用中以图表的形式表示,如引文网络,社交网络(追随者图,朋友网络......),生物网络或电信。

使用Graph提取的特征可以通过依赖相邻节点之间的信息流来提高预测模型的性能。但是,表示图形数据并不简单,特别是如果不打算实现手工制作的特征,因为大多数ML模型都期望固定大小或线性输入,而图形数据不是这种情况。

在这篇文章中,将探讨一些处理通用图的方法,以便根据直接从数据中学习的图表表示进行节点分类。

数据集:

在Keras引用网络数据集将作为基地,在整个这个职位的实现和实验。每个节点代表科学论文,节点之间的边缘代表两篇论文之间的引用关系。

每个节点由一组二进制特征(字袋)以及将其链接到其他节点的一组边表示。

该数据集有2708个节点,分为七个类别之一。该网络有5429个链接。每个节点也由二进制字特征表示,指示相应字的存在。总体而言,每个节点有1433个二进制(稀疏)功能。以下我们只使用140 样品用于培训,其余用于验证/测试。

问题设定:

怎样使用Keras和Tensorflow学习图形数据

问题:在没有训练样本的情况下为图中的节点分配类标签。

直觉 / 假设:图中接近的节点更可能具有相似的标签。

解决方案:找到一种从图中提取特征的方法,以帮助对新节点进行分类。

拟议方法:

基线模型:

怎样使用Keras和Tensorflow学习图形数据

简单的基线模型

首先尝试使用最简单的模型,该模型学习仅使用二进制特征预测节点类并丢弃所有图形信息。该模型是一个完全连接的神经网络,它将二进制特征作为输入,并输出每个节点的类概率。

def get_features_only_model(n_features, n_classes):
    in_ = Input((n_features,))
    x = Dense(10, activation="relu", kernel_regularizer=l1(0.001))(in_)
    x = Dropout(0.5)(x)
    x = Dense(n_classes, activation="softmax")(x)
    model = Model(in_, x)
    model.compile(loss="sparse_categorical_crossentropy", metrics=['acc'], optimizer="adam")
    model.summary()
    return model

基线模型准确度:53.28%

这是将通过添加基于图形的功能来尝试改进的初始准确度。

添加图表功能:

通过在预测两个输入节点之间的最短路径长度的倒数的辅助任务上训练网络,通过将每个节点嵌入到矢量中来自动学习图形特征的一种方法,如下图和下面的代码片段所示:

怎样使用Keras和Tensorflow学习图形数据

学习每个节点的嵌入向量

def get_graph_embedding_model(n_nodes):

    in_1 = Input((1,))

    in_2 = Input((1,))

    emb = Embedding(n_nodes, 100, name="node1")

    x1 = emb(in_1)

    x2 = emb(in_2)

    x1 = Flatten()(x1)

    x1 = Dropout(0.1)(x1)

    x2 = Flatten()(x2)

    x2 = Dropout(0.1)(x2)

    x = Multiply()([x1, x2])

    x = Dropout(0.1)(x)

    x = Dense(1, activation="linear", name="spl")(x)

    model = Model([in_1, in_2], x)

    model.compile(loss="mae", optimizer="adam")

    model.summary()

    return model

下一步是使用预先训练的节点嵌入作为分类模型的输入。还使用学习的嵌入向量的距离添加附加输入,该输入是相邻节点的平均二进制特征。

生成的分类网络如下图所示:

怎样使用Keras和Tensorflow学习图形数据

使用预训练嵌入来进行节点分类

图嵌入分类模型准确度:73.06%

可以看到,添加学习图形特征作为分类模型的输入有助于显着提高分类准确性,与基线模型相比,从53.28%到73.06%。

改进图形功能学习:

可以通过进一步推进预训练并使用节点嵌入网络中的二进制特征,然后除了节点嵌入向量之外重新使用来自二进制特征的预训练权重,来进一步改进先前的模型。这导致模型依赖于从图结构中学习的二进制特征的更有用的表示。

怎样使用Keras和Tensorflow学习图形数据

 

改进的图嵌入分类模型准确度:76.35%

与以前的方法相比,这种额外的改进增加了几个百分点。

关于怎样使用Keras和Tensorflow学习图形数据就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


网站题目:怎样使用Keras和Tensorflow学习图形数据
转载注明:http://pwwzsj.com/article/jchodh.html