-
Notifications
You must be signed in to change notification settings - Fork 558
Euler Model
Siran Yang edited this page Jan 16, 2019
·
1 revision
本节介绍tf_euler
中实现的所有图表征学习模型。用户可以直接在TensorFlow中使用这些模型。
所有的图表征学习模型均继承基类Model
,而Model
进一步的继承Layer
。Layer
是tf_euler
中封装的基本单位。Layer
及其子类有三个主要函数:
class Layer(object):
def __init__(self, name=None, **kwargs):
"""初始化元信息,以及对象所包含的其他Layer"""
pass
def build(self, input_shape):
"""初始化该对象自身会用到的模型权重,会在__call__()首次执行时被调用"""
pass
def call(self, inputs):
"""将该对象应用到输入中,会在__call__()执行时调用"""
pass
所有的Model
子类的call
方法接受一组源顶点:1-D tf.Tensor
,返回一个四元组ModelOutput
,其定义为:
ModelOutput = collections.namedtuple(
'ModelOutput', [
'embedding', # 2-D tf.Tensor,表示输入所对应的embedding
'loss', # 标量 tf.Tensor,表示输入所对应的loss
'metric_name', # str,表示该模型所用评估指标名称
'metric' # 标量 tf.Tensor,表示模型的评估指标(streaming)
])
所有的非监督图表征学习模型继承自类UnsupervisedModel
,其本身继承Model
:
class UnsupervisedModel(Model):
def __init__(self,
node_type, # int,顶点类型,用于负采样
edge_type, # tf.Tensor,采样目标顶点边类型(多值)
max_id, # int,图中的最大id
num_negs=5, # int,每个源点的负采样个数
**kwargs):
pass
UnsuperVisedModel
的call
函数对源点使用tf_euler.sample_neighbor
采样正例,使用tf_euler.sample_node
采样负例。然后再使用具体的encode / decode方法计算loss。
所有的监督图表征学习模型继承自SupervisedModel
,其本身继承Model
:
class SupervisedModel(Model):
def __init__(self,
label_idx, # int,label在稠密特征中的编号
label_dim, # int,label在稠密特征中的维度
num_class=None, # int,分类个数,label为标量时必须
sigmoid_loss=False, # bool,使用sigmoid或者softmax作为损失函数
**kwargs):
pass
SupervisedModel
的call
函数使用tf_euler.get_dense_feature
从图中抽取顶点标签进行顶点分类。然后使用具体的encode / decode方法计算loss。
tf_euler
目前实现了六个常用的图表征学习算法和两个用于异构图上的表征学习算法,包含在以下的几个具体类中:
tf_euler.models.LINE( # 非监督
node_type, edge_type, max_id, # 同基类
dim, # int,embedding维度
order# 1 / 2, 一阶模型 / 二阶模型,默认1
)
tf_euler.models.Node2Vec( # 非监督
node_type, edge_type, max_id, # 同基类
dim, # int,embedding维度
walk_len, # int,游走长度,默认3
walk_p, # int,回采参数,默认1
walk_q, # int,外采参数,默认1
left_win_size, # int,左滑动窗口长度,默认1
right_win_size # int,右滑动窗口长度,默认1
)
tf_euler.models.GraphSage( # 非监督
node_type, edge_type, max_id, # 同基类
metapath, # Python列表,成员为 1-D int64 tf.Tensor,每步的边类型集合(多值)
fanouts, # Python列表,成员为 int,每阶的采样个数
dim, # embedding维度
aggregator, # 汇聚类型,默认mean
concat, # 汇聚方法,默认False
feature_idx, # 稠密特征的编号,默认-1
feature_dim, # 稠密特征维度,默认0
use_feature, # 是否使用稠密特征,默认True
use_id # 是否使用顶点id,默认False
)
tf_euler.models.SupervisedGraphSage( # 监督
label_idx, label_dim, # 同基类
metapath, # Python列表,成员为 1-D int64 tf.Tensor,每阶采样的边类型集合(多值)
fanouts, # Python列表,成员为 int,每阶的采样个数
dim, # embedding维度
aggregator, # 汇聚类型,mean / meanpool / maxpool,默认mean
concat, # 汇聚方法,默认False
feature_idx, # 稠密特征的编号,默认-1
feature_dim, # 稠密特征维度,默认0
)
tf_euler.models.ScalableGCN( # 监督
label_idx, label_dim, # 同基类
edge_type, # 1-D int64 tf.Tensor,边类型集合(多值)
fanout, # int,相邻顶点采样个数
num_layers, # int,GCN模型层数
dim, # embedding维度
aggregator, # 汇聚类型,默认mean
concat, # 汇聚方法,默认False
feature_idx, # 稠密特征的编号,默认-1
feature_dim, # 稠密特征维度,默认0
)
# ScalableGCN需要在应用到输入后调用:
scalable_gcn.make_session_run_hook()
# 并将返回的tf.train.SessionRunHook加到tf.train.MonitoredTrainingSession当中
tf_euler.models.GAT( # 监督
label_idx, label_dim, # 同基类
feature_idx, # 稠密特征的编号,默认-1
feature_dim, # 稠密特征维度,默认0
max_id, # int,图中的最大id,默认-1
hidden_dim, # int,隐层宽度,默认128
nb_num, # int,相邻顶点采样数,默认5
edge_type # int,采样的边类型集合,默认0
)