continuous_value_model

paddle.fluid.layers. continuous_value_model ( input, cvm, use_cvm=True ) [源代码]

注意:该OP仅支持在CPU运行。

该OP在CTR项目中,用于去除或处理 input 中的展示和点击值。

输入 input 是一个含展示(show)和点击(click)的词向量,其形状为

continuous_value_model - 图1

(N为batch大小,D为 2 + 嵌入维度 ),show和click占据词向量D的前两维。如果 use_cvm=True ,它会计算

continuous_value_model - 图2

continuous_value_model - 图3

,输出的形状为

continuous_value_model - 图4

。如果 use_cvm=False ,它会从输入 input 中移除show和click,输出的形状为

continuous_value_model - 图5

cvm 为show和click信息,维度为 [N,2][N,2] 。

参数:

  • input (Variable) - cvm操作的输入张量。维度为 [N,D][N,D] 的2-D LoDTensor。 N为batch大小, D为 2 + 嵌入维度 , lod level = 1 。

  • cvm (Variable) - cvm操作的展示和点击张量。维度为 [N,2][N,2] 的2-D Tensor。 N为batch大小,2为展示和点击值。

  • use_cvm (bool) - 是否使用展示和点击信息。如果使用,输出维度和输入相等,对 input 中的展示和点击值取log;如果不使用,输出维度为输入减2(移除展示和点击值)。

返回:Variable(LoDTensor)变量, [N,M][N,M] 的2-D LoDTensor。如果 use_cvm=True ,M等于输入的维度D,否则M等于 D - 2 。

返回类型:变量(Variable),数据类型与 input 一致。

代码示例:

  1. import paddle.fluid as fluid
  2. input = fluid.layers.data(name="input", shape=[-1, 1], lod_level=1, append_batch_size=False, dtype="int64")
  3. label = fluid.layers.data(name="label", shape=[-1, 1], append_batch_size=False, dtype="int64")
  4. embed = fluid.layers.embedding(
  5. input=input,
  6. size=[100, 11],
  7. dtype='float32')
  8. label_shape = fluid.layers.shape(label)
  9. ones = fluid.layers.fill_constant(shape=[label_shape[0], 1], dtype="int64", value=1)
  10. show_clk = fluid.layers.cast(fluid.layers.concat([ones, label], axis=1), dtype='float32')
  11. show_clk.stop_gradient = True
  12. input_with_cvm = fluid.layers.continuous_value_model(embed, show_clk, True)