首页 > 其他分享 >TF-GNN踩坑记录(四)

TF-GNN踩坑记录(四)

时间:2023-04-26 11:37:50浏览次数:33  
标签:node set features 记录 MapFeatures sets TF GNN fn

目录

引言

由于图数据结构问题,直接使用Tensorflow的一些层是无法直接处理图数据的,需要借用TF-GNN框架下的MapFeatures对图数据中的节点特征或是边特征进行变换。

题外话(MapFeatures使用)

节点特征变换

from tensorflow.keras.layers import BatchNormalization
from tensorflow_gnn.keras.layers import MapFeatures

# map node features
def node_sets_fn(node_set, *, node_set_name):
    features = node_set.features
    return BatchNormalization()(features["hidden_state"])

graph = MapFeatures(node_sets_fn=node_sets_fn)(graph)

边特征变换

from tensorflow_gnn.keras.layers import MapFeatures

# Hashes edge features called "id", leaves others unchanged:
def edge_sets_fn(edge_set, *, edge_set_name):
    features = edge_set.get_features_dict()
    ids = features.pop("id")
    num_bins = 100_000 if edge_set_name == "views" else 20_000
    hashed_ids = tf.keras.layers.Hashing(num_bins=num_bins)(ids)
    features["hashed_id"] = hashed_ids
    return features
graph = MapFeatures(edge_sets_fn=edge_sets_fn)(graph)

传入额外参数

from functools import partial
from tensorflow.keras.layers import Dense
from tensorflow_gnn.keras.layers import MapFeatures

# map node features
def node_sets_fn(node_set, *, node_set_name, dim):
    features = node_set.features
    return Dense(dim)(features["hidden_state"])

graph = MapFeatures(node_sets_fn=partial(node_sets_fn, dim=64))(graph)

问题

就是在使用MapFeatures时,如果循环使用则会在存储模型的时候报错:ValueError: Unable to create dataset (name already exists)

问题demo


from functools import partial
from tensorflow.keras.layers import Dense
from tensorflow_gnn.keras.layers import MapFeatures

# map node features
def node_sets_fn(node_set, *, node_set_name, dim):
    features = node_set.features
    return Dense(dim)(features["hidden_state"])

for ln in range(layer_num):
    graph = MapFeatures(node_sets_fn=partial(node_sets_fn, dim=64))(graph)

解决方案

最后发现是在使用MapFeatures时,使用层时如Dense需要区分每一次变换时的层名


from functools import partial
from tensorflow.keras.layers import Dense
from tensorflow_gnn.keras.layers import MapFeatures

# map node features
def node_sets_fn(node_set, *, node_set_name, dim,name):
    features = node_set.features
    return Dense(dim, name=f'Dense_{name}')(features["hidden_state"])

for ln in range(layer_num):
    graph = MapFeatures(node_sets_fn=partial(node_sets_fn, dim=64,name=ln))(graph)

标签:node,set,features,记录,MapFeatures,sets,TF,GNN,fn
From: https://www.cnblogs.com/lovefisho/p/17355084.html

相关文章

  • djangorestframework-jwt使用
    服务端配置安装第三方库pipinstalldjangorestframework-jwt在settings.py中配置JWT##可以在这里配置全局的认证,也可以在视图中单独配置。REST_FRAMEWORK={'DEFAULT_AUTHENTICATION_CLASSES':['rest_framework_jwt.authentication.JSONWebTokenAuthentic......
  • Telegram 源码解读点滴记录
    1.test_callable_plain,作用:判断参数是否与函数声明一致usingfalse_t=char;structtrue_t{ false_tdata[2];};static_assert(sizeof(false_t)!=sizeof(true_t),"Ican'twork:(");template< typenameMethod, typename...Args, typename=decltype(......
  • [NISACTF 2022]is secret
    本题考点1,RC4对称加密。2,flask模板注入。解题过程打开题目什么也没发现啥有用的,查看源码也没什么发现。上网查了一下发现这道题时[CISCN2019华东南]DoubleSecret原题。看了别人的wp,用御剑扫一下发现了/secret这个路径。页面内容为Tellmeyoursecret.Iwillencryptitso......
  • Educational Codeforces Round 147(A~E)(补提记录)
    EducationalCodeforcesRound147(RatedforDiv.2)A:题意:每个问号都能被替换成0~9,求替换每个问号后所能的到的数的数量注:所得到的序列不能有前导0思路:先判断第一位是什么,作为特判,为0,则不能得到任何数输出0,为?则答案×9再依次枚举之后的每一个数,若为问号答案*10#include<io......
  • 记录-因为写不出拖拽移动效果,我恶补了一下Dom中的各种距离
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助背景最近在项目中要实现一个拖拽头像的移动效果,一直对JSDom拖拽这一块不太熟悉,甚至在网上找一个示例,都看得云里雾里的,发现遇到最大的拦路虎就是JSDom各种各样的距离,让人头晕眼花,看到一个距离属性,大脑中的印象极......
  • Ubuntu 22.04.1 LTS 安装FastFDS
    安装过程一波三折,差点被坑死!一、简单介绍1、FastFDS是什么?FastDFS是阿里余庆用C语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文......
  • [问题记录]k8s集群中coredns解析失败
    目录[问题记录]k8s集群中coredns解析失败故障现象问题排查问题解析举例说明:解决方案修改ndots参数参考文档[问题记录]k8s集群中coredns解析失败故障现象在k8s集群,使用coredns提供集群内部dns服务但是在使用过程中,偶现解析公网域名失败的情况,应用内日志记录显示UnknownHost问......
  • 关于MRS环境下printf打印不加换行无法打印显示问题
    关于MRS环境下printf打印不加换行无法打印显示问题 原因:默认情况下,stdout流是行缓冲的,因此仅在到达换行符后(或被告知时)才显示缓冲区中的内容. 关于stdout,C语言中的stdout是一个定义在<stdio.h>的宏(macro),它展开到一个FILE*(“指向FILE的指针”)类型的表达式(不一定是常量......
  • CF1479 Div1 VP记录
    战况:别的不说,这个B1WA3发是真的精髓。A略B我们设此时在第一队队尾的为las0,在第二队队尾的为las1,要放的数为x。先考虑B1:显然有:如果las0等于x,放在第二队,如果las1等于x,放在第一队。考虑两边都不同的情况,我们想要这个x后面尽快跟上一个不同的数,依此来创造新的......
  • SciTE4AutoHotkey新建文件默认编码 UTF-8 with BOM
    若SciTE4AutoHotkey,能在新建时自动选编码为 带BOM的UTF-8的就省事省心了。可通过配置SciTEGlobal.properties、SciTEUser.properties无法解决这个难题,似乎是个bug。通过菜单 工具Scite4AutoHotkeysettings...设置也只能使新建的文件编码为UTF-8NOBOM经过无数次的搜索以......