首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Keras中训练时出现无效参数错误

在Keras中训练时出现无效参数错误
EN

Stack Overflow用户
提问于 2019-02-06 18:58:21
回答 1查看 262关注 0票数 0

我正在尝试使用keras创建一个电影推荐模型:

代码语言:javascript
复制
import pandas as pd
from sklearn.model_selection import train_test_split
import keras
from keras.layers import Input, Embedding, Dot, Flatten

rating = pd.read_csv("./ratings.csv",usecols=[0,1,2])
users = len(rating.userId.unique())
movies = len(rating.movieId.unique())
embed_size = 3
train, test = train_test_split(rating, test_size=0.2)

movie_input = Input(shape=[1], name="movie_in")
movie_embed = Embedding(movies, embed_size, name="movie_embed")(movie_input)
movie_vector = Flatten(name="flatten_movies")(movie_embed)

user_input = Input(shape=[1], name="user_in")
user_embed = Embedding(users, embed_size, name="user_embed")(user_input)
user_vector = Flatten(name="flatten_users")(user_embed)

prod = Dot(axes=-1, name="dot-product")([movie_vector, user_vector])

model = keras.Model(inputs=[user_input, movie_input], outputs=prod)
model.compile(optimizer='adam', loss='mse')
model.fit(x=[train.userId, train.movieId], y=train.rating,epochs=10, 
verbose=0)

当我尝试训练模型时,我得到了以下错误:

代码语言:javascript
复制
tensorflow.python.framework.errors_impl.InvalidArgumentError: 
indices[15,0]= 7438 is not in [0, 5000)

[[{{node movie_embed/embedding_lookup}} = GatherV2[Taxis=DT_INT32, 
Tindices=DT_INT32, Tparams=DT_FLOAT, _class=["loc:@training/Adam/Assign_2"], 
_device="/job:localhost/replica:0/task:0/device:CPU:0"] 
(movie_embed/embeddings/read, movie_embed/Cast, 
training/Adam/gradients/movie_embed/embedding_lookup_grad/concat/axis)]]

但大多数在线教程都使用相同的代码,它们可以正常工作。

EN

回答 1

Stack Overflow用户

发布于 2019-02-06 19:14:25

您的movie_embed嵌入层(基本上是一个查找表)有5000行,因此它需要0到5000之间的整数作为输入。您给了它7438作为输入,这会导致错误。rating.movieId中可能有5000个唯一值,但显然也有[0, 5000)区间之外的值。您需要将train.userId整数映射到此间隔上才能使其工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54551988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档