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
相关产品推荐
相关产品推荐

