コード例 #1
0
 def get_multiplier(self):
     """根据schedule定义分段线性函数
     """
     schedule = sorted(self.schedule.items())
     if schedule[0][0] != 0:
         schedule = [(0, 0.)] + schedule
     lr = K.constant(schedule[0][1], dtype='float32')
     t = K.cast(self.iterations, 'float32')
     for i in range(len(schedule)):
         if i == len(schedule) - 1:
             x = K.constant(schedule[i][1], dtype='float32')
             t0 = schedule[i][0]
         else:
             dx = schedule[i + 1][1] - schedule[i][1]
             dt = schedule[i + 1][0] - schedule[i][0]
             k = 1. * dx / dt
             t0 = schedule[i][0]
             x0 = schedule[i][1]
             x = x0 + k * (t - t0)
         lr = K.switch(t >= t0, x, lr)
     return lr
コード例 #2
0
 def __init__(self, docs_encode, **kwargs):
     """
     余弦相似度层, 不适合大规模语料, 比如100w以上的问答对
     :param docs_encode: np.array, bert-white vector of senence 
     :param kwargs: 
     """
     self.docs_encode = docs_encode
     super(CosineLayer, self).__init__(**kwargs)
     self.docs_vector = K.constant(self.docs_encode, dtype="float32")
     self.l2_docs_vector = K.sqrt(
         K.sum(K.maximum(K.square(self.docs_vector), 1e-12),
               axis=-1))  # x_inv_norm