Reputation: 85
I am using tensorflow 1.15 and keras 2.1.2 with python 3.7 This is a multilayer perceptron code for collaborative filtering. Model was already built and there was no error in model summary. But when getting epochs and accuracy below error are getting. I have included my model code and the accuracy code with here.
latent_dim = 10
*# Define inputs*
article_input = Input(shape=[1],name='article-input')
user_input = Input(shape=[1], name='user-input')
*# MLP Embeddings*
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 Embeddings*
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 layers*
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)
*# Prediction from both layers*
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()
#Train the Model
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("Train Error")
plt.show()
y_hat = np.round(model.predict([test.id, test.user_id]), decimals=2)
y_true = test.user_like
mean_absolute_error(y_true, y_hat)
And below errors are what i am getting. Can I have a solution for my collaborative filtering one?
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: indices[24,0] = 335 is not in [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("Train Error")
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: indices[24,0] = 335 is not in [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()
Upvotes: 4
Views: 970
Reputation: 22031
redefine num_user and num_article in this way....
num_user = int(articles.user_id.max())
num_article = int(articles.id.max())
Upvotes: 2