You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras训练协同过滤模型报期望1输入收到2张量错误如何解决?

错误原因

  • 你当前的模型只定义了1个输入节点,但训练时传入了用户ID、电影ID两组输入,和模型定义的输入数量不匹配
  • 输入形状配置错误:输入是单个整数ID,不需要填入样本总数、嵌入维度,正确形状为(1,)
  • 变量逻辑错误:你将inputs变量的指向从初始输入层覆盖为了Dot层的输出,导致最终创建的模型输入绑定完全错误
  • 输出层配置错误:预测评分是回归任务,输出维度应为1,你配置的5维不符合需求

修正后的模型代码

K_FACTORS = 100 # 电影和用户嵌入的维度
TEST_USER = 2000 # 测试用的用户ID(user_id = 2000)

# 定义两个独立输入层,分别对应用户ID、电影ID
user_input = layers.Input(shape=(1,), name='user_input')
movie_input = layers.Input(shape=(1,), name='movie_input')

# 用户嵌入层绑定用户输入,压平多余维度
embeddingUsers = layers.Embedding(max_userid, K_FACTORS, input_length=1)(user_input)
usersEmbedded = layers.Flatten()(embeddingUsers)

# 电影嵌入层绑定电影输入,压平多余维度
embeddingMovies = layers.Embedding(max_movieid, K_FACTORS, input_length=1)(movie_input)
moviesEmbedded = layers.Flatten()(embeddingMovies)

# 计算两个嵌入向量的点积作为匹配特征
dot_feature = layers.Dot(axes=1)([usersEmbedded, moviesEmbedded])

# 输出预测的评分值
outputs = layers.Dense(1, activation='relu')(dot_feature)

# 模型定义时传入两个输入组成的列表
model = keras.Model(inputs=[user_input, movie_input], outputs=outputs)
keras.utils.plot_model(model, "my_first_model_with_shape_info.png", show_shapes=True)

print(model.summary())

训练说明

修正后直接调用原有model.fit代码即可正常运行,不需要修改传入的[Users, Movies]和Ratings参数。

内容的提问来源于stack exchange,提问作者William Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:15:10