def batch_sim5(w, M, eps=1e-6):
"""
w: matrix with shape (batch, memory_elem)
M: tensor with shape (batch, memory_size, memory_elem)
eps: numerical stability parameter
"""
M = M[0] # (memory_size, memory_elem)
def batch_cos_sim(m, w, eps=eps):
"""
Takes two vectors and calculates the scalar cosine similarity.
m: vector with shape (memory_elem,)
w: vector with shape (batch, memory_elem)
returns: scalar
"""
sim = T.dot(m,w.T) / T.sqrt((m*m).sum() * (w*w).sum(1) + eps)
return sim #(batch,)
sim, _ = theano.map(fn=batch_cos_sim, sequences=[M], non_sequences=[w])
sim = sim.dimshuffle(1,0) # (batch, memory_size)
return sim
评论列表
文章目录