高级API、异构图:谷歌发布TF-GNN,在TensorFlow创建图神经网络

机器之心报道

机器之心报道

编辑:陈萍

今天,TensorFlow 官方博客发布了 TensorFlow Graph Neural Networks(TensorFlow GNN)库 ,这个库使得用户在使用 TensorFlow 时能够轻松处理图结构数据。

此前,TensorFlow GNN 的早期版本已经在谷歌的各种应用中使用,包括垃圾邮件和异常检测、流量估计、YouTube 内容标记等。特别是,考虑到谷歌数据种类繁多,该库在设计时就考虑到了异构图。

高级API、异构图:谷歌发布TF-GNN,在TensorFlow创建图神经网络

项目地址:https://github.com/tensorflow/gnn

为何使用 GNN?

无论是在现实世界中,还是在我们设计的系统中,图无处不在。一组对象或是不同的人以及他们之间的联系,通常可以用图来描述。通常情况下,机器学习中的数据是结构化或关系型的,因此也可以用图来描述。虽然 GNN 的基础研究已经有几十年的历史,但近几年才取得一些进展,包括在交通预测、假新闻检测、疾病传播建模、物理模拟,以及理解为什么分子会有气味等。

高级API、异构图:谷歌发布TF-GNN,在TensorFlow创建图神经网络

图可以为不同类型的数据进行关系建模,包括网页(左)、社交关系(中)或分子(右)。

怎样定义图呢?简单来讲,图表示一组实体(节点或顶点)之间的关系(边)。我们可以描述每个节点、边或整个图,从而将信息存储在图的每一部分中。此外,我们可以赋予图边缘方向性来描述信息或信息流。

GNN 可以用来回答关于这些图的多个特征问题。GNN 可用于节点级任务,对图的节点进行分类,并预测图中的分区和相关性,类似于图像分类或分割。最后,我们可以在边缘级别使用 GNN 来发现实体之间的连接。

TensorFlow GNN

TF-GNN(TensorFlow GNN) 提供了在 TensorFlow 中实现 GNN 模型的构建块。除了建模 API 之外,该库还为处理图数据提供了可用工具,包括基于张量的图数据结构、数据处理 pipeline 和一些供用户快速入门的示例模型。

高级API、异构图:谷歌发布TF-GNN,在TensorFlow创建图神经网络

TF-GNN 工作流程组件

TF-GNN 库的初始版本包含许多实用程序和功能,供初学者和有经验的用户使用,包括:

  • 高级 keras 风格的 API 用于创建 GNN 模型,可以很容易地与其他类型的模型组合。GNN 通常与排序、深度检索结合使用或与其他类型的模型(图像、文本等)混合使用;
  • 定义良好的模式用来声明图拓扑结构,以及验证工具。该模式描述了其训练数据的大小,并用于指导其他工具;
  • GraphTensor 复合张量类型,可以用来保存图数据,也可以进行批处理,并具有可用的图操作例程;
  • GraphTensor 结构操作库:在节点和边缘上进行各种有效的 broadcast 和 pooling 操作,以及提供相关操作的工具;标准 baked 卷积库,机器学习工程师、研究人员可以对其轻松扩展;高级 API 可以帮助工程师快速构建 GNN 模型而不必担心细节;
  • 模型可以从图训练数据编码,以及用于将此数据解析为数据结构的库中提取各种特征。

示例

下面示例使用 TF-GNN Keras API 构建了一个模型,该模型可以根据观看内容和喜欢的类型向用户推荐电影。

完成这项任务使用 ConvGNNBuilder 方法来指定边的类型和节点配置,即对边使用 WeightedSumConvolution(定义如下):

import tensorflow as tf    import tensorflow_gnn as tfgnn    # Model hyper-parameters:    h_dims = {'user': 256, 'movie': 64, 'genre': 128}    # Model builder initialization:    gnn = tfgnn.keras.ConvGNNBuilder(      lambda edge_set_name: WeightedSumConvolution(),      lambda node_set_name: tfgnn.keras.layers.NextStateFromConcat(         tf.keras.layers.Dense(h_dims[node_set_name]))    )    # Two rounds of message passing to target node sets:    model = tf.keras.models.Sequential([        gnn.Convolve({'genre'}),  # sends messages from movie to genre        gnn.Convolve({'user'}),  # sends messages from movie and genre to users        tfgnn.keras.layers.Readout(node_set_name="user"),        tf.keras.layers.Dense(1)    ])

有时我们希望 GNN 性能更强大,例如,在上个示例中,我们可能希望模型在给出推荐电影时可以同时给出权重。下面代码片段中定义了一个更高级的 GNN,它带有自定义图卷积,以及带有权重边。下面代码定义了 WeightedSumConvolution 类可以将边值池化为所有边的权重总和:

class WeightedSumConvolution(tf.keras.layers.Layer):  """Weighted sum of source nodes states."""  def call(self, graph: tfgnn.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)    weights = graph.edge_sets[edge_set_name]['weight']    weighted_messages = tf.expand_dims(weights, -1) * messages    pooled_messages = tfgnn.pool_edges_to_node(        graph,        edge_set_name,        tfgnn.TARGET,        reduce_type='sum',        feature_value=weighted_messages)    return pooled_messages

请注意,即使卷积是在只考虑源节点和目标节点的情况下编写的,TF-GNN 仍可确保它适用并可以无缝处理异构图(具有各种类型的节点和边)。

安装

这是目前安装 tensorflow_gnn 的唯一方法。强烈建议使用虚拟环境。

Clone tensorflow_gnn:

$> git clone https://github.com/tensorflow/gnn.git tensorflow_gnn

安装 TensorFlow:

$> pip install tensorflow

安装 Bazel:Bazel 需要构建包的源代码。安装步骤请参考:https://docs.bazel.build/versions/main/install.html

安装 GraphViz:这个包使用 GraphViz 作为可视化工具,安装因操作系统而异,例如 Ubuntu:

$> sudo apt-get install graphviz graphviz-dev

安装 tensorflow_gnn:

$> cd tensorflow_gnn && python3 -m pip install .

参考链接:

https://blog.tensorflow.org/2021/11/introducing-tensorflow-gnn.html

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/105237.html

(0)

相关推荐

  • 白露到,吃2粥,饮2水,喝2汤,润秋燥解秋乏,开启健康养生模式

    白露到,吃2粥,饮2水,喝2汤,润秋燥解秋乏,开启健康养生模式

    生活 2021年9月7日
  • 14岁女孩身高168,儿科医生:三种食物都是“长高王”,多吃点。

    根据儿童研究中心的数据显示:65%的儿童存在身高发育迟缓的问题,大多数原因都是偏食,厌食,发育迟缓,体弱多病等。为了能够让孩子能够“高人一头”,大多数家长在孩子小时候就开始进行了营养补充,在如今这个社会家长之间攀比的不再是孩子的学习成绩,身高长相也是家长们之间谈论的焦点。

    生活 2021年11月10日
  • 这个女人的手和脚难以忍受。我没想到会有什么举动,但她救了自己。

    养生这个事儿,很多人觉得只是老年人的专利,其实年轻人同样也需要养生。现在很多大家觉得是老年人专属疾病的问题,频繁发生在年轻人身上,像脑梗、心梗这类问题实在是太多了。新闻上也总有年纪轻轻就突发心梗脑梗去世的消失让人看着心痛不已。

    生活 2021年12月9日
  • 育儿不孤独(孩子的皮疹)

    2021.11.7今天立冬,写下这个其实略显矫情,但是愿意将一些事情记住,用做若干年后做为怀念。我又不爱拍照片或视频那就还按很久以前的习惯,写些东西。 这基本算是熙哥从出生到现在一周五个月来第一次生病,对我和妻子也算是一个小小的考验,我就且小做记录,留待多年后怀念。 4日,因为疫情,小区被出入管控,所以我没有去上班,如往常一样妻子给熙哥穿好衣服后和我说熙哥身上很烫可能发烧了,我看熙哥翻箱倒柜拆家的精神头一如往昔,觉得可能是刚起床身上温度烧高吧,当用手探了下熙哥脖颈的时候确实发现烫的很。遂拿体温计给熙哥量体温,但熙哥正翻箱倒柜在兴头根本不配合。无奈,只能让熙哥知道世界上还有动画片这种东西了。在给熙哥看完动画片一看温度已经飚到38.6度。这是熙哥出生以来第一次高烧,一下有点措手不及。偏偏又赶上疫情小区出入管控,我先在群里给居委会的报备了下,他们问了下情况做了登记,因为刚刚统一做了核酸,也没有让再做,说如果需要去医院得和他们说声完后叫120过来。我冷静下来想想谁家孩子不发个烧了,安慰了下自己和妻子决定先服用点退烧药观察一下。吃完退烧药后中午基本就退了,我和妻子都也算松了口气,谁知下午熙哥一觉睡醒后体温又到了38.5,因为退烧药要间隔四到小时,所以我们用了物理退热。但是反观熙哥,没有表现出任何症状和不适,依然维持着吃饭,睡觉,毁灭地球的生活方式,因为在养育熙哥的过程中我也是看了些贴子做了功课的,所以纸上谈兵我判断熙哥这很可能是幼儿急疹。普及一下,幼儿急疹,婴幼儿两周以内常发的一种病,通常表现就是没有其他症状的突发高烧,一般会高烧三到五天又突然烧退,半天后身上会出疹子,出疹后两到三天基本就好了,没有治疗方法,只能一直退着烧,等到天数后自然就好了。但我毕竟没有化验结果,又没有临床经验,只是猜想所以心理还是很着急,第一天基本就是吃了退烧药就下来了,过三四个小时就上去了。晚上基本也都在38.5度左右,我和妻子基本每隔两小时都起来给他测下温,一到间隔时间够吃退热药就赶紧服用,就这么过了第一天。 5日,白天基本还是按照第一天的规律,我同事听说后还给送来些退烧药,熙哥依然没有表现出任何症状,因为他生病我有些娇纵熙哥毁灭地球的进度又有些加快。重点是到了晚上了。晚饭后熙哥体温突然飙升到39.4度,我和妻子一下子都乱了手脚,真是不知如何是好了,服用退烧药后温度也最多降到38.6度。当时确实有些不知所措,想联系救护车到医院吧但是听说我们这种被封控的小区先得做核酸,有了结果才能就诊。一时间六神无主,好在我妻子一起带娃的一个邻居知道情况后给了我们一个大夫的电话也是我们邻居,打电话后大夫问了下孩子情况,说不要慌,先试试再退烧药物退到38.5度就物理退。一般小孩子只要下了38.5度没什么大碍,邻居又给拿来些消炎的药物,当夜是最难熬的一宿,我和妻子一整宿都在用温水给熙哥擦身体,敷额头,每隔一小时测一下体温,说真的我现在对我家这个温度计都有阴影了,因为我家的温度计是电子显示数字的,不是水银那种,你会看到那个数显会一直往上走,直到滴滴响起来才会停止,每次当数显到38以上了,心就跟着揪起来了,看着体温一点点递增,心里默念,赶紧响赶紧响,到后来我都不敢看了。间隔的时候就从百度那里各种查。毕竟内事不决问百度嘛。百度里说什么的都有,也是看这一条刚放宽心,下一条又提心吊胆,一晚上心理都是起起落落,一直到凌晨三半点吃了退烧药我太困了眯了过去,睡梦中也是各种高烧看病,胡乱中摸到宝宝脑袋,出了好多汗,是烧退的表现。后来大概五六点吧,用手摸了下没那么热了终于可以睡了。 6日,上午小区终于解封了,熙哥前一天没怎么吃东西,我决定去孕婴店放放血给熙哥买点平常舍不得或者是妻子嫌垃圾食品不让他吃的。回来后妻子刚给他测温,说39.2度,我又有点崩溃。熙哥今天真是也有点状态不大好了,毁灭地球没那么力度大了,有时候还得我搭把手,看着熙哥高烧的小眼泪,我也得帮忙,一家不拆,何以拆地球?我也决定去医院了,不等了,我觉得如果再不去熙哥没事我就得疯了。又给熙哥吃了点退烧的,没效果,我和妻子商量先吃了午饭再去吧,去了还不定等到啥时候,妻子准备了午饭顺便破坏了下熙哥拆地球的工作,我抱着熙哥看绘本,这时我感觉熙哥身上开始出汗了,而且越来越多,是好现象。我看了下时间,距上次吃退烧药已经过去了四五个小时了,这要是之前早反弹起来了,我试了试喂他吃点东西,他也开始进食了,心理终于有点小期盼了,基本隔几分钟就摸熙哥脑袋,摸的我的手也失灵了,试不出温度了,用动画片骗熙哥量了下体温,37.7度,终于到38度以内了。这几天第一次下38度,我以为自己没测准。又试了一遍,37.8度,应该没错了。吃饭后决定先不着忙去医院,再看看反弹不,熙哥这几天也是累了,一方面身体肯定不舒服,另一方面,从出生到现在从没这样无法无天为所欲为过,有点太嗨。从下午两点一直睡到晚上六点。一直出汗,说明再退烧,好现象,按时间距上次吃退烧药9个小时,药效应该过了没有烧起来,我和妻子如遇大赦一般,聊了些开心的话题。晚上一直也没烧,因为他这症状之前非常符合幼儿急疹,我就等着他出疹子了,只有出了疹子就代表高烧终于过去了,期间被我扒了衣服仔细看了多次。没出疹子但也没发烧,由于熙哥下午睡的太多,晚上要补之前拆家的工作一直到凌晨12.30才睡。终于可以睡个安心觉了,睡梦中桃花深处小溪哗哗流水声非常惬意,我忽然一激灵醒了。MD真的有哗哗的流水声,暖气崩了?这是我的第一个想法,因为暖气这几天刚供水加压。我一个鲤鱼打挺冲出去,路过卫生间的时候听到流水声再卫生间,心理松了口气。因为我暖气阀门家里的坏了,想关阀门得让物业从楼道里关,进去一看,洗脸盆水管崩了。关了后看下表凌晨3点半。 7日,一起床我就巴拉熙哥身上看了一遍,还是没疹子,难道是我判断有误?不应该啊。熙哥今天没烧,就是这几天纵容的有点蹬鼻子上脸,得想办法给他矫正下。晚上带熙哥玩的时候发现他腰上出疹子了,我真是个天才。 就这些吧,其实有条件还是早要娃,我这岁数连熬几个通宵还真是有些吃不住。 有娃后矫情不少,其实也一直想把熙哥前前后后包括怀他生他都写下来,但是腹稿打了好多都没写过,最近发现之前他的有些事记不清了,看来得抓紧写了

    生活 2021年11月10日
  • 新能源车热销引发刚果(金)抢钴风潮

    经济观察报 曾磊/文 2021年9月,中国投资的刚果(金)Sicomines铜钴矿项目冶炼二期工程正式投产,预计年产5180吨金属量的粗制氧化钴产品。2021年11月8日,中国国内钴金属价格站上419000元/吨,60天内上涨了11.93%,创出2019年中旬大跌以来的新高。高歌猛进的钴价背后,是如火如荼的中国企业对海外钴资源的争夺。

    科技 2021年11月13日