|
@@ -51,11 +51,9 @@ class StaticModel():
|
|
|
hidden_acts=self.hidden_acts
|
|
|
)
|
|
|
|
|
|
-
|
|
|
-
|
|
|
if is_infer:
|
|
|
left_features = input
|
|
|
- left_vec = dssm_model(left_features)
|
|
|
+ left_vec = dssm_model(left_features,None,is_infer=True)
|
|
|
self.inference_target_var = left_vec
|
|
|
fetch_dict = {
|
|
|
'left_vector': left_vec
|
|
@@ -63,42 +61,40 @@ class StaticModel():
|
|
|
return fetch_dict
|
|
|
else:
|
|
|
label,left_features, right_features = input
|
|
|
+ # 获取相似度和特征向量
|
|
|
+ sim_score, left_vec, right_vec = dssm_model(left_features, right_features)
|
|
|
|
|
|
+ self.inference_target_var = sim_score
|
|
|
+ self.left_vector = left_vec
|
|
|
+ self.right_vector = right_vec
|
|
|
|
|
|
- # 获取相似度和特征向量
|
|
|
- sim_score, left_vec, right_vec = dssm_model(left_features, right_features)
|
|
|
-
|
|
|
- self.inference_target_var = sim_score
|
|
|
- self.left_vector = left_vec
|
|
|
- self.right_vector = right_vec
|
|
|
|
|
|
|
|
|
+ # 计算损失
|
|
|
+ # 使用带margin的二元交叉熵损失
|
|
|
+ pos_mask = paddle.cast(label > 0.5, 'float32')
|
|
|
+ neg_mask = 1.0 - pos_mask
|
|
|
+
|
|
|
+ positive_loss = -pos_mask * paddle.log(paddle.clip(sim_score, 1e-8, 1.0))
|
|
|
+ negative_loss = -neg_mask * paddle.log(paddle.clip(1 - sim_score + self.margin, 1e-8, 1.0))
|
|
|
+
|
|
|
+ loss = positive_loss + negative_loss
|
|
|
+ avg_cost = paddle.mean(loss)
|
|
|
+
|
|
|
+ self._cost = avg_cost
|
|
|
|
|
|
- # 计算损失
|
|
|
- # 使用带margin的二元交叉熵损失
|
|
|
- pos_mask = paddle.cast(label > 0.5, 'float32')
|
|
|
- neg_mask = 1.0 - pos_mask
|
|
|
-
|
|
|
- positive_loss = -pos_mask * paddle.log(paddle.clip(sim_score, 1e-8, 1.0))
|
|
|
- negative_loss = -neg_mask * paddle.log(paddle.clip(1 - sim_score + self.margin, 1e-8, 1.0))
|
|
|
-
|
|
|
- loss = positive_loss + negative_loss
|
|
|
- avg_cost = paddle.mean(loss)
|
|
|
-
|
|
|
- self._cost = avg_cost
|
|
|
+ # 计算accuracy
|
|
|
+ predictions = paddle.cast(sim_score > 0.5, 'float32')
|
|
|
+ accuracy = paddle.mean(paddle.cast(paddle.equal(predictions, label), 'float32'))
|
|
|
|
|
|
- # 计算accuracy
|
|
|
- predictions = paddle.cast(sim_score > 0.5, 'float32')
|
|
|
- accuracy = paddle.mean(paddle.cast(paddle.equal(predictions, label), 'float32'))
|
|
|
-
|
|
|
- fetch_dict = {
|
|
|
- 'loss': avg_cost,
|
|
|
- 'accuracy': accuracy,
|
|
|
- #'similarity': sim_score,
|
|
|
- #'left_vector': left_vec,
|
|
|
- #'right_vector': right_vec
|
|
|
- }
|
|
|
- return fetch_dict
|
|
|
+ fetch_dict = {
|
|
|
+ 'loss': avg_cost,
|
|
|
+ 'accuracy': accuracy,
|
|
|
+ #'similarity': sim_score,
|
|
|
+ #'left_vector': left_vec,
|
|
|
+ #'right_vector': right_vec
|
|
|
+ }
|
|
|
+ return fetch_dict
|
|
|
|
|
|
def create_optimizer(self, strategy=None):
|
|
|
optimizer = paddle.optimizer.Adam(
|