PaddlePaddle在使用ml-1m数据集训练个性化推荐模型的时候出现输入数据维度不相同错误

在个性化推荐模型中,使用PaddlePaddle框架训练时遇到输入数据维度不一致的错误。通过调整用户特征模型和电影特征模型的输出大小至相同,成功解决了余弦相似度计算的维度不匹配问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 关键字:数据维度余弦相似度

  • 问题描述:通过定义一个用户提取用户特征综合模型输出大小为100和一个电影特征模型输出大小为200,来训练一个个性化推荐模型,在训练的时候,出现输入数据维度不相同错误。

  • 报错信息:

<ipython-input-5-7d5f9bd60bf7> in inference_program()
      3     mov_combined_features = get_mov_combined_features()
      4 
----> 5     inference = layers.cos_sim(X=usr_combined_features, Y=mov_combined_features)
      6     scale_infer = layers.scale(x=inference, scale=5.0)
      7 

/opt/conda/envs/py35-paddle1.0.0/lib/python3.5/site-packages/paddle/fluid/layers/nn.py in cos_sim(X, Y)
    947         outputs={'Out': [out],
    948                  'XNorm': [xnorm],
--> 949                  'YNorm': [ynorm]})
    950     return out
    951 

/opt/conda/envs/py35-paddle1.0.0/lib/python3.5/site-packages/paddle/fluid/layer_helper.py in append_op(self, *args, **kwargs)
     48 
     49     def append_op(self, *args, **kwargs):
---> 50         return self.main_program.current_block().append_op(*args, **kwargs)
     51 
     52     def multiple_input(self, input_param_name='input'):

/opt/conda/envs/py35-paddle1.0.0/lib/python3.5/site-packages/paddle/fluid/framework.py in append_op(self, *args, **kwargs)
   1205         """
   1206         op_desc = self.desc.append_op()
-> 1207         op = Operator(block=self, desc=op_desc, *args, **kwargs)
   1208         self.ops.append(op)
   1209         return op

/opt/conda/envs/py35-paddle1.0.0/lib/python3.5/site-packages/paddle/fluid/framework.py in __init__(***failed resolving arguments***)
    654         if self._has_kernel(type):
    655             self.desc.infer_var_type(self.block.desc)
--> 656             self.desc.infer_shape(self.block.desc)
    657 
    658     def _has_kernel(self, op_type):

EnforceNotMet: Enforce failed. Expected framework::slice_ddim(x_dims, 1, x_dims.size()) == framework::slice_ddim(y_dims, 1, y_dims.size()), but received framework::slice_ddim(x_dims, 1, x_dims.size()):100 != framework::slice_ddim(y_dims, 1, y_dims.size()):200.
All dimensions except the 1st of Input(X) and Input(Y) must be equal. at [/paddle/paddle/fluid/operators/cos_sim_op.cc:50]
PaddlePaddle Call Stacks: 
  • 问题复现:定义一个用户特征模型,在最后的全连接层fluid.layers.fc的接口中设置大小为100。在定义一个电影特征模型,在最后的全连接层fluid.layers.fc的接口中设置大小为200。最后对这两个模型的全连接层通过fluid.layers.cos_sim计算它们的余弦相似度,在训练的时候就会出现以上的问题。错误代码如下:
concat_embed = layers.concat(input=[usr_fc, usr_gender_fc, usr_age_fc, usr_job_fc], axis=1)
usr_combined_features = layers.fc(input=concat_embed, size=100, act="tanh")
······
concat_embed = layers.concat(input=[mov_fc, mov_categories_hidden, mov_title_conv], axis=1)
mov_combined_features = layers.fc(input=concat_embed, size=200, act="tanh")

inference = layers.cos_sim(X=usr_combined_features, Y=mov_combined_features)
  • 解决问题:fluid.layers.cos_sim接口的参数XY要求必须有相同的形状,除了输入Y的第一维可以是1(与输入X不同),而上面的错误时因为两个全连接层的大小设置不一样,导致的输出XY形状不相同,所以才导致错误。正确代码如下:
concat_embed = layers.concat(input=[usr_fc, usr_gender_fc, usr_age_fc, usr_job_fc], axis=1)
usr_combined_features = layers.fc(input=concat_embed, size=200, act="tanh")
······
concat_embed = layers.concat(input=[mov_fc, mov_categories_hidden, mov_title_conv], axis=1)
mov_combined_features = layers.fc(input=concat_embed, size=200, act="tanh")

inference = layers.cos_sim(X=usr_combined_features, Y=mov_combined_features)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值