InvalidArgumentError: 索引[24,0] = 335 不在 [0, 304) 范围内 [[{{node user-embedding-mlp_1/GatherV2}}]]

我正在使用 TensorFlow 1.15 和 Keras 2.1.2,搭配 Python 3.7。这是一个用于协同过滤的多层感知机代码。模型已经构建完成,并且模型摘要中没有错误。但是,在获取轮次和准确率时出现了下面的错误。我已经在这里包含了我的模型代码和准确率代码。

latent_dim = 10*# 定义输入*article_input = Input(shape=[1],name='article-input')user_input = Input(shape=[1], name='user-input')*# MLP 嵌入*article_embedding_mlp = Embedding(num_article + 1, latent_dim, name='article-embedding-mlp')(article_input)article_vec_mlp = Flatten(name='flatten-article-mlp')(article_embedding_mlp)user_embedding_mlp = Embedding(num_user + 1, latent_dim, name='user-embedding-mlp')(user_input)user_vec_mlp = Flatten(name='flatten-user-mlp')(user_embedding_mlp)*# MF 嵌入*article_embedding_mf = Embedding(num_article + 1, latent_dim, name='article-embedding-mf')(article_input)article_vec_mf = Flatten(name='flatten-article-mf')(article_embedding_mf)user_embedding_mf = Embedding(num_user + 1, latent_dim, name='user-embedding-mf')(user_input)user_vec_mf = Flatten(name='flatten-user-mf')(user_embedding_mf)*# MLP 层*concat = merge([article_vec_mlp, user_vec_mlp], mode='concat', name='concat')concat_dropout = Dropout(0.2)(concat)fc_1 = Dense(100, name='fcs-1', activation='relu')(concat_dropout)fc_1_bn = BatchNormalization(name='batch-norm-1s')(fc_1)fc_1_dropout = Dropout(0.2)(fc_1_bn)fc_2 = Dense(50, name='fcs-2', activation='relu')(fc_1_dropout)fc_2_bn = BatchNormalization(name='batch-norm-2s')(fc_2)fc_2_dropout = Dropout(0.2)(fc_2_bn)*# 来自两层的预测*pred_mlp = Dense(10, name='pred-mlp', activation='relu')(fc_2_dropout)pred_mf = merge([article_vec_mf, article_vec_mf], mode='dot', name='pred-mf')combine_mlp_mf = merge([pred_mf, pred_mlp], mode='concat', name='combine-mlp-mf')result = Dense(1, name='result', activation='relu')(combine_mlp_mf)model = Model([article_input, user_input], result)model.compile(optimizer='rmsprop', loss='mean_squared_error')model.summary()

#训练模型

history = model.fit([train.id, train.user_id], train.user_like, nb_epoch=3)pd.Series(history.history['loss']).plot(logy=True)plt.xlabel("Epoch")plt.ylabel("训练误差")plt.show()y_hat = np.round(model.predict([test.id, test.user_id]), decimals=2)y_true = test.user_likemean_absolute_error(y_true, y_hat)

以下是我遇到的问题。可以为我的协同过滤问题提供解决方案吗?

InvalidArgumentError                      Traceback (most recent call last)E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\client\session.py in _do_call(self, fn, *args)   1364     try:-> 1365       return fn(*args)   1366     except errors.OpError as e:E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\client\session.py in _run_fn(feed_dict, fetch_list, target_list, options, run_metadata)   1349       return self._call_tf_sessionrun(options, feed_dict, fetch_list,-> 1350                                       target_list, run_metadata)   1351 E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\client\session.py in _call_tf_sessionrun(self, options, feed_dict, fetch_list, target_list, run_metadata)   1442                                             fetch_list, target_list,-> 1443                                             run_metadata)   1444 InvalidArgumentError: 索引[24,0] = 335 不在 [0, 304) 范围内     [[{{node user-embedding-mlp_1/GatherV2}}]]During handling of the above exception, another exception occurred:InvalidArgumentError                      Traceback (most recent call last)<ipython-input-13-1444472fcfba> in <module>----> 1 history = model.fit([train.id, train.user_id], train.user_like, nb_epoch=3)      2 pd.Series(history.history['loss']).plot(logy=True)      3 plt.xlabel("Epoch")      4 plt.ylabel("训练误差")      5 plt.show()E:\My\Ananconda\envs\tensor\lib\site-packages\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs)   1655                               initial_epoch=initial_epoch,   1656                               steps_per_epoch=steps_per_epoch,-> 1657                               validation_steps=validation_steps)   1658    1659     def evaluate(self, x=None, y=None,E:\My\Ananconda\envs\tensor\lib\site-packages\keras\engine\training.py in _fit_loop(self, f, ins, out_labels, batch_size, epochs, verbose, callbacks, val_f, val_ins, shuffle, callback_metrics, initial_epoch, steps_per_epoch, validation_steps)   1211                     batch_logs['size'] = len(batch_ids)   1212                     callbacks.on_batch_begin(batch_index, batch_logs)-> 1213                     outs = f(ins_batch)   1214                     if not isinstance(outs, list):   1215                         outs = [outs]E:\My\Ananconda\envs\tensor\lib\site-packages\keras\backend\tensorflow_backend.py in __call__(self, inputs)   2355         session = get_session()   2356         updated = session.run(fetches=fetches, feed_dict=feed_dict,-> 2357                               **self.session_kwargs)   2358         return updated[:len(self.outputs)]   2359 E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\client\session.py in run(self, fetches, feed_dict, options, run_metadata)    954     try:    955       result = self._run(None, fetches, feed_dict, options_ptr,--> 956                          run_metadata_ptr)    957       if run_metadata:    958         proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\client\session.py in _run(self, handle, fetches, feed_dict, options, run_metadata)   1178     if final_fetches or final_targets or (handle and feed_dict_tensor):   1179       results = self._do_run(handle, final_targets, final_fetches,-> 1180                              feed_dict_tensor, options, run_metadata)   1181     else:   1182       results = []E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\client\session.py in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)   1357     if handle is None:   1358       return self._do_call(_run_fn, feeds, fetches, targets, options,-> 1359                            run_metadata)   1360     else:   1361       return self._do_call(_prun_fn, handle, feeds, fetches)E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\client\session.py in _do_call(self, fn, *args)   1382                     '\nsession_config.graph_options.rewrite_options.'   1383                     'disable_meta_optimizer = True')-> 1384       raise type(e)(node_def, op, message)   1385    1386   def _extend_graph(self):InvalidArgumentError: 索引[24,0] = 335 不在 [0, 304) 范围内     [[node user-embedding-mlp_1/GatherV2 (defined at E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\framework\ops.py:1748) ]]Original stack trace for 'user-embedding-mlp_1/GatherV2':  File "E:\My\Ananconda\envs\tensor\lib\runpy.py", line 193, in _run_module_as_main    "__main__", mod_spec)  File "E:\My\Ananconda\envs\tensor\lib\runpy.py", line 85, in _run_code    exec(code, run_globals)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\ipykernel_launcher.py", line 16, in <module>    app.launch_new_instance()  File "E:\My\Ananconda\envs\tensor\lib\site-packages\traitlets\config\application.py", line 664, in launch_instance    app.start()  File "E:\My\Ananconda\envs\tensor\lib\site-packages\ipykernel\kernelapp.py", line 583, in start    self.io_loop.start()  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tornado\platform\asyncio.py", line 149, in start    self.asyncio_loop.run_forever()  File "E:\My\Ananconda\envs\tensor\lib\asyncio\base_events.py", line 442, in run_forever    self._run_once()  File "E:\My\Ananconda\envs\tensor\lib\asyncio\base_events.py", line 1462, in _run_once    handle._run()  File "E:\My\Ananconda\envs\tensor\lib\asyncio\events.py", line 145, in _run    self._callback(*self._args)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tornado\ioloop.py", line 690, in <lambda>    lambda f: self._run_callback(functools.partial(callback, future))  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tornado\ioloop.py", line 743, in _run_callback    ret = callback()  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tornado\gen.py", line 787, in inner    self.run()  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tornado\gen.py", line 748, in run    yielded = self.gen.send(value)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\ipykernel\kernelbase.py", line 361, in process_one    yield gen.maybe_future(dispatch(*args))  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tornado\gen.py", line 209, in wrapper    yielded = next(result)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\ipykernel\kernelbase.py", line 268, in dispatch_shell    yield gen.maybe_future(handler(stream, idents, msg))  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tornado\gen.py", line 209, in wrapper    yielded = next(result)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\ipykernel\kernelbase.py", line 541, in execute_request    user_expressions, allow_stdin,  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tornado\gen.py", line 209, in wrapper    yielded = next(result)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\ipykernel\ipkernel.py", line 300, in do_execute    res = shell.run_cell(code, store_history=store_history, silent=silent)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\ipykernel\zmqshell.py", line 536, in run_cell    return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\IPython\core\interactiveshell.py", line 2858, in run_cell    raw_cell, store_history, silent, shell_futures)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\IPython\core\interactiveshell.py", line 2886, in _run_cell    return runner(coro)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\IPython\core\async_helpers.py", line 68, in _pseudo_sync_runner    coro.send(None)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\IPython\core\interactiveshell.py", line 3063, in run_cell_async    interactivity=interactivity, compiler=compiler, result=result)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\IPython\core\interactiveshell.py", line 3254, in run_ast_nodes    if (await self.run_code(code, result,  async_=asy)):  File "E:\My\Ananconda\envs\tensor\lib\site-packages\IPython\core\interactiveshell.py", line 3331, in run_code    exec(code_obj, self.user_global_ns, self.user_ns)  File "<ipython-input-10-fe3553834f55>", line 11, in <module>    user_embedding_mlp = Embedding(num_user + 1, latent_dim, name='user-embedding-mlp')(user_input)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\keras\engine\topology.py", line 603, in __call__    output = self.call(inputs, **kwargs)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\keras\layers\embeddings.py", line 134, in call    out = K.gather(self.embeddings, inputs)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\keras\backend\tensorflow_backend.py", line 1193, in gather    return tf.gather(reference, indices)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\util\dispatch.py", line 180, in wrapper    return target(*args, **kwargs)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\ops\array_ops.py", line 3956, in gather    params, indices, axis, name=name)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\ops\gen_array_ops.py", line 4082, in gather_v2    batch_dims=batch_dims, name=name)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\framework\op_def_library.py", line 794, in _apply_op_helper    op_def=op_def)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\util\deprecation.py", line 507, in new_func    return func(*args, **kwargs)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\framework\ops.py", line 3357, in create_op    attrs, op_def, compute_device)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\framework\ops.py", line 3426, in _create_op_internal    op_def=op_def)  File "E:\My\Ananconda\envs\tensor\lib\site-packages\tensorflow_core\python\framework\ops.py", line 1748, in __init__    self._traceback = tf_stack.extract_stack()

回答:

以这种方式重新定义 num_user 和 num_article….

num_user = int(articles.user_id.max())num_article = int(articles.id.max())

Related Posts

在 ImageDataGenerator 中,数据是在每个批次还是每个周期中进行增强的?

我知道在每个周期中我们会有一组新的增强。但我的问题是,…

如何使用Sk-learn的OneHotEncoder对数据框中的两个或多个列进行编码?

这是我的数据框 我想使用sklearn的OneHotE…

如何避免在Pandas中应用独热编码时出现NaN

我正在训练一个机器学习模型来预测我国内的房价。我不确定…

如何访问FastText分类器管道?

众所周知,Facebook的FastText是一个出色…

自定义Sklearn核函数的决策函数结果错误

我成功实现了自己的自定义线性核函数,使用clf.pre…

如何在Python中使用训练好的模型测试新句子 (sklearn)

我有用于多类文本分类的训练模型代码,并且它运行正常,但…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注