def tensor_factorization_symmetric(q,
alpha=1e-7,
beta=1.0,
tensor_initializer='uniform',
tensor_regularizer=None,
tensor_constraint=None):
"""
:param q: rank of inner parameter
:param alpha: scale of eye to add. 0=pos/neg semidefinite, >0=pos/neg definite
:param beta: multiplier of tensor. 1=positive,-1=negative
"""
def fun(layer, units, input_dim, name):
Q = add_weight(layer=layer,
initializer=tensor_initializer,
regularizer=tensor_regularizer,
constraint=tensor_constraint,
shape=(units, q, input_dim),
name=name) # units, input_dim, q
tmp = K.batch_dot(Q, Q, axes=[[1], [1]]) # p,m,q + p,m,q = p,m,m
V = beta * ((eye(input_dim, input_dim) * alpha) + tmp) # m,p,p
return [q], V
return fun
评论列表
文章目录