Browse Source

change model embedding layer

often 5 months ago
parent
commit
8845c35c7c

+ 13 - 18
recommend-model-produce/src/main/python/models/dssm/net.py

@@ -4,42 +4,37 @@ import paddle.nn.functional as F
 import numpy as np
 
 class DSSMLayer(nn.Layer):
-    def __init__(self, feature_num=5, embedding_dim=8, output_dim=16, 
+    def __init__(self, feature_nums=[5,5,5,5,5], embedding_dim=8, output_dim=16, 
                  hidden_layers=[64, 32], hidden_acts=["relu", "relu"]):
         super(DSSMLayer, self).__init__()
         
-        self.feature_num = feature_num
+        self.feature_num = len(feature_nums)
         self.embedding_dim = embedding_dim
         self.output_dim = output_dim
         # 第一层的输入维度是所有特征的embedding拼接
         self.hidden_layers = [feature_num * embedding_dim] + hidden_layers + [output_dim]
         self.hidden_acts = hidden_acts
-
-        # 为每个特征创建embedding层
+        
+        
+        # 为每个特征创建对应维度的Embedding层
         self.left_embeddings = nn.LayerList([
-            nn.Linear(
-                1, 
-                embedding_dim,
+            nn.Embedding(
+                num_embeddings=feature_nums[i],
+                embedding_dim=embedding_dim,
                 weight_attr=paddle.ParamAttr(
                     initializer=paddle.nn.initializer.XavierNormal()
-                ),
-                bias_attr=paddle.ParamAttr(
-                    initializer=paddle.nn.initializer.Constant(value=0.0)
                 )
-            ) for _ in range(feature_num)
+            ) for i in range(self.feature_num)
         ])
 
         self.right_embeddings = nn.LayerList([
-            nn.Linear(
-                1, 
-                embedding_dim,
+            nn.Embedding(
+                num_embeddings=feature_nums[i], 
+                embedding_dim=embedding_dim,
                 weight_attr=paddle.ParamAttr(
                     initializer=paddle.nn.initializer.XavierNormal()
-                ),
-                bias_attr=paddle.ParamAttr(
-                    initializer=paddle.nn.initializer.Constant(value=0.0)
                 )
-            ) for _ in range(feature_num)
+            ) for i in range(self.feature_num)
         ])
 
         # 左视频塔

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

@@ -10,7 +10,7 @@ class StaticModel():
 
     def _init_hyper_parameters(self):
         # 修改超参数初始化
-        self.feature_num = self.config.get("hyper_parameters.feature_num", 5)
+        self.feature_num = self.config.get("hyper_parameters.feature_nums", [5,5,5,5,5])
         self.embedding_dim = self.config.get("hyper_parameters.embedding_dim", 8)
         self.output_dim = self.config.get("hyper_parameters.output_dim", 16)
         self.hidden_layers = self.config.get("hyper_parameters.hidden_layers", [64, 32])
@@ -41,7 +41,7 @@ class StaticModel():
     def net(self, input, is_infer=False):
         # 创建模型实例
         dssm_model = DSSMLayer(
-            feature_num=self.feature_num,
+            feature_nums=self.feature_nums,
             embedding_dim=self.embedding_dim,
             output_dim=self.output_dim,
             hidden_layers=self.hidden_layers,