Bläddra i källkod

add infer code

often 5 månader sedan
förälder
incheckning
7c3d4f31ee

+ 57 - 12
recommend-model-produce/src/main/python/models/dssm/net.py

@@ -98,18 +98,63 @@ class DSSMLayer(nn.Layer):
    
         return paddle.concat(embedded_features, axis=1)
 
-    def forward(self, left_features, right_features):
-        # 获取两个视频的特征表示      
-        left_vec, right_vec = self.get_vectors(left_features, right_features)
-
-        # 计算相似度
-        sim_score = F.cosine_similarity(
-            left_vec, 
-            right_vec, 
-            axis=1
-        ).reshape([-1, 1])
-
-        return sim_score, left_vec, right_vec
+    def forward(self, left_features, right_features, is_infer):
+        if is_infer:
+            left_vec = get_leftvectors(left_features)
+            return left_vec
+        else:
+            # 获取两个视频的特征表示      
+            left_vec, right_vec = self.get_vectors(left_features, right_features)
+
+            # 计算相似度
+            sim_score = F.cosine_similarity(
+                left_vec, 
+                right_vec, 
+                axis=1
+            ).reshape([-1, 1])
+
+            return sim_score, left_vec, right_vec
+
+
+
+    def get_leftvectors(self, left_features):
+        """获取两个视频的16维特征向量"""
+        # 处理左视频特征
+        
+        left_embedded = self._process_features(left_features, self.left_embeddings)
+        
+        # left_vec = left_embedded
+        left_vec = paddle.reshape(left_embedded, [-1, self.feature_num * self.embedding_dim])
+              
+        for i, layer in enumerate(self._left_tower):
+            left_vec = layer(left_vec)
+        
+        return left_vec
+
+
+
+
+
+    def get_rightvectors(self,right_features):        
+        # 处理右视频特征
+        right_embedded = self._process_features(right_features, self.right_embeddings)
+        # right_vec = right_embedded
+        right_vec = paddle.reshape(right_embedded, [-1, self.feature_num * self.embedding_dim])  
+
+        for layer in self._right_tower:
+            right_vec = layer(right_vec)
+
+            
+        # 确保输出是L2归一化的
+        left_vec = F.normalize(left_vec, p=2, axis=1)
+        right_vec = F.normalize(right_vec, p=2, axis=1)
+        
+        return right_vec
+
+
+
+
+
 
     def get_vectors(self, left_features, right_features):
         """获取两个视频的16维特征向量"""

+ 8 - 8
recommend-model-produce/src/main/python/models/dssm/static_model.py

@@ -54,7 +54,13 @@ class StaticModel():
     
 
         if is_infer:
-            left_features, right_features = input
+            left_features = input
+            left_vec = dssm_model(left_features)
+            self.inference_target_var = left_vec
+            fetch_dict = {
+                'left_vector': left_vec
+            }
+            return fetch_dict
         else:
             label,left_features, right_features = input
 
@@ -66,13 +72,7 @@ class StaticModel():
         self.left_vector = left_vec
         self.right_vector = right_vec
 
-        if is_infer:
-            fetch_dict = {
-                'similarity': sim_score,
-                'left_vector': left_vec,
-                'right_vector': right_vec
-            }
-            return fetch_dict
+
 
         # 计算损失
         # 使用带margin的二元交叉熵损失