AdvancedAPI,HeterogeneousGraph:Google发布了TF-GNN以在TensorFlowGraph结构化数据中创建图神经网络。早期版本的TensorFlowGNN已用于谷歌的各种应用程序,包括垃圾邮件和异常检测、流量估计、YouTube内容标签等。特别是,考虑到谷歌数据的多样性,该库在设计时考虑到了异构图。项目地址:https://github.com/tensorflow/gnn为什么要用GNN?图无处不在,无论是在现实世界中还是在我们设计的系统中。一组对象或不同的人以及它们之间的联系通常可以用图来描述。通常,机器学习中的数据是结构化的或相关的,因此也可以用图形来描述。虽然GNN的基础研究已经存在了几十年,但直到最近几年才取得一些进展,包括交通预测、假新闻检测、疾病传播建模、物理模拟和理解分子为什么有气味。图可以为不同类型的数据建立关系模型,包括网页(左)、社会关系(中)或分子(右)。如何定义图形?简单来说,图表示一组实体(节点或顶点)之间的关系(边)。我们可以描述每个节点、边或整个图,从而将信息存储在图的每个部分中。此外,我们可以赋予图的边以方向性来描述信息或信息流。GNN可用于回答有关这些图的多个特征问题。GNN可用于节点级任务,以对图的节点进行分类并预测图中的分区和相关性,类似于图像分类或分割。最后,我们可以在边缘级别使用GNN来发现实体之间的联系。TensorFlowGNNTF-GNN(TensorFlowGNN)为在TensorFlow中实现GNN模型提供构建块。除了建模API之外,该库还提供了处理图数据的可用工具,包括基于张量的图数据结构、数据处理管道以及一些示例模型,供用户快速上手。TF-GNN工作流组件TF-GNN库的初始版本包含许多适用于初学者和有经验用户的实用程序和功能,包括:用于创建可以轻松与其他类型模型组合集成的GNN模型的高级keras风格API。GNN通常与排序、深度检索结合使用,或与其他类型的模型(图像、文本等)混合使用;用于声明图形拓扑和验证工具的定义明确的模式。该模式描述了其训练数据的大小,并用于指导其他工具;GraphTensor复合张量类型,可以用来保存图数据,也可以批处理,有图操作例程可用;GraphTensor结构操作库:在节点和边上执行各种有效的广播和池化操作,并提供相关操作的工具;标准烘焙卷积库,机器学习工程师和研究人员可以轻松扩展;先进的API可以帮助工程师快速构建GNN模型,而无需担心细节;该模型可以从图形训练数据编码中提取各种特征,以及用于将这些数据解析为数据结构的库。示例以下示例使用TF-GNNKerasAPI构建一个模型,该模型可以根据用户观看的内容和喜欢的类型向用户推荐电影。要完成此任务,请使用ConvGNNBuilder方法指定边类型和节点配置,即对边使用WeightedSumConvolution(定义如下):importtensorflowastfimporttensorflow_gnnastfgnn#Modelhyper-parameters:h_dims={'user':256,'movie':64,'类型':128}#Modelbuilderinitialization:gnn=tfgnn.keras.ConvGNNBuilder(lambdaedge_set_name:WeightedSumConvolution(),lambdanode_set_name:tfgnn.keras.layers.NextStateFromConcat(tf.keras.layers.Dense(h_dims[node_set_name])))#Tworoundsofargets=nodepassingtotf.keras.models.Sequential([gnn.Convolve({'genre'}),#sendsmessagesfrommovietogenregnn.Convolve({'user'}),#sendsmessagesfrommovieandgenretouserstfgnn.keras.layers.Readout(node_set_name="user"),tf.keras.layers.Dense(1)])有时候我们希望GNN更强大,例如在前面的例子中,我们可能希望模型在推荐电影时给予权重。下面的代码片段中定义了一个更高级的GNN,它具有自定义图形卷积和带权重的边。下面的代码定义了WeightedSumConvolution类,可以将边的值pool成所有边的权重之和:.GraphTensor,edge_set_name:tfgnn.EdgeSetName)->tfgnn.Field:messages=tfgnn.broadcast_node_to_edges(graph,edge_set_name,tfgnn.SOURCE,feature_name=tfgnn.DEFAULT_STATE_NAME)权重=graph.edge_sets[edge_set_name]['weight']weighted_messages=tfweweights_dims(,-1)*messagespooled_messages=tfgnn.pool_edges_to_node(graph,edge_set_name,tfgnn.TARGET,reduce_type='sum',feature_value=weighted_messages)returnpooled_messages请注意,即使是仅考虑源节点和目标节点编写的卷积,TF-GNN仍然确保它适用并且可以无缝处理异构图(具有各种类型的节点和边)。安装这是目前安装tensorflow_gnn的唯一方式。强烈建议使用虚拟环境。克隆tensorflow_gnn:$>gitclonehttps://github.com/tensorflow/gnn.gittensorflow_gnn安装TensorFlow:$>pipinstalltensorflow安装Bazel:Bazel需要源代码来构建包。安装步骤请参考:https://docs.bazel.build/versions/main/install.htmlInstallGraphViz:该包使用GraphViz作为可视化工具,安装因操作系统而异,如Ubuntu:$>sudoapt-getinstallgraphvizgraphviz-dev安装tensorflow_gnn:$>cdtensorflow_gnn&&python3-mpipinstall。
