未验证 提交 f26154fc 编写于 作者: Z zhoushiyu 提交者: GitHub

deepfm dygraph change FC to Linear (#4138)

上级 c35c10a8
import math import math
import paddle.fluid as fluid import paddle.fluid as fluid
from paddle.fluid.dygraph.nn import FC, Embedding from paddle.fluid.dygraph.nn import Linear, Embedding
class DeepFM(fluid.dygraph.Layer): class DeepFM(fluid.dygraph.Layer):
...@@ -94,18 +94,18 @@ class DNN(fluid.dygraph.Layer): ...@@ -94,18 +94,18 @@ class DNN(fluid.dygraph.Layer):
super(DNN, self).__init__() super(DNN, self).__init__()
self.args = args self.args = args
self.init_value_ = 0.1 self.init_value_ = 0.1
sizes = self.args.layer_sizes + [1] sizes = [self.args.num_field * self.args.embedding_size] + self.args.layer_sizes + [1]
acts = [self.args.act acts = [self.args.act
for _ in range(len(self.args.layer_sizes))] + [None] for _ in range(len(self.args.layer_sizes))] + [None]
w_scales = [ w_scales = [
self.init_value_ / math.sqrt(float(10)) self.init_value_ / math.sqrt(float(10))
for _ in range(len(self.args.layer_sizes)) for _ in range(len(self.args.layer_sizes))
] + [self.init_value_] ] + [self.init_value_]
self.fcs = [] self.linears = []
for i in range(len(self.args.layer_sizes) + 1): for i in range(len(self.args.layer_sizes) + 1):
fc = FC( linear = Linear(
self.full_name(), sizes[i],
size=sizes[i], sizes[i + 1],
act=acts[i], act=acts[i],
param_attr=fluid.ParamAttr( param_attr=fluid.ParamAttr(
initializer=fluid.initializer.TruncatedNormalInitializer( initializer=fluid.initializer.TruncatedNormalInitializer(
...@@ -113,13 +113,13 @@ class DNN(fluid.dygraph.Layer): ...@@ -113,13 +113,13 @@ class DNN(fluid.dygraph.Layer):
bias_attr=fluid.ParamAttr( bias_attr=fluid.ParamAttr(
initializer=fluid.initializer.TruncatedNormalInitializer( initializer=fluid.initializer.TruncatedNormalInitializer(
loc=0.0, scale=self.init_value_))) loc=0.0, scale=self.init_value_)))
self.add_sublayer('fc_%d' % i, fc) self.add_sublayer('linear_%d' % i, linear)
self.fcs.append(fc) self.linears.append(linear)
def forward(self, feat_embeddings): def forward(self, feat_embeddings):
y_dnn = fluid.layers.reshape( y_dnn = fluid.layers.reshape(
feat_embeddings, feat_embeddings,
[-1, self.args.num_field * self.args.embedding_size]) [-1, self.args.num_field * self.args.embedding_size])
for fc in self.fcs: for linear in self.linears:
y_dnn = fc(y_dnn) y_dnn = linear(y_dnn)
return y_dnn return y_dnn
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册