Im trying to use Keras model to recommend visits to some content based on his previous visits and other users behaviours. I have done something similar with a book recommendator system with a rating of 1-5.
user_id content_id visit
1 1 1
2 1 0
3 1 0
1 2 1
2 2 0
3 2 1
I create my embeddings
from keras.layers import Input, Embedding, Flatten, Dot, Dense
from keras.models import Model
from sklearn.model_selection import train_test_split
from keras.models import load_model
# content embedding path
content_input = Input(shape=[1], name="Content-Input")
content_embedding = Embedding(n_content+1, 10, name="Content-Embedding")(content_input)
content_vec = Flatten(name="Flatten-Contents")(content_embedding)
# user embedding path
user_input = Input(shape=[1], name="User-Input")
user_embedding = Embedding(n_users+1, 10, name="User-Embedding")(user_input)
user_vec = Flatten(name="Flatten-Users")(user_embedding)
# dot product and creating model
prod = Dot(name="Dot-Product", axes=1)([content_vec, user_vec])
model = Model([user_input, content_input], prod)
model.compile('adam', 'mean_squared_error')
And I try to create the model
train, test = train_test_split(visits, test_size=0.2, random_state=42)
if os.path.exists('regression_model.h5'):
model = load_model('regression_model.h5')
else:
history = model.fit([train.user_id, train.book_id], train.rating, epochs=5, verbose=1)
model.save('regression_model.h5')
plt.plot(history.history['loss'])
plt.xlabel("Epochs")
plt.ylabel("Training Error")
But then I get a InvalidArgumentError: Graph execution error.
Epoch 1/5
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
/var/folders/y8/4bdyq9hn6p58g8jy30g6vk000000gn/T/ipykernel_85241/1014936592.py in <module>
2 model = load_model('regression_model.h5')
3 else:
----> 4 history = model.fit([train.user_id, train.public_id], train.visit, epochs=5, verbose=1)
5 model.save('regression_model.h5')
6 # plt.plot(history.history['loss'])
~/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/utils/traceback_utils.py in error_handler(*args, **kwargs)
65 except Exception as e: # pylint: disable=broad-except
66 filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67 raise e.with_traceback(filtered_tb) from None
68 finally:
69 del filtered_tb
~/.pyenv/versions/3.7.3/lib/python3.7/site-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
53 ctx.ensure_initialized()
54 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
---> 55 inputs, attrs, num_outputs)
56 except core._NotOkStatusException as e:
57 if name is not None:
InvalidArgumentError: Graph execution error:
Detected at node 'model_10/content-Embedding/embedding_lookup' defined at (most recent call last):
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/ipykernel_launcher.py", line 17, in <module>
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/traitlets/config/application.py", line 976, in launch_instance
app.start()
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/ipykernel/kernelapp.py", line 712, in start
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/tornado/platform/asyncio.py", line 199, in start
.. versionadded:: 4.1
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/asyncio/base_events.py", line 539, in run_forever
self._run_once()
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/asyncio/base_events.py", line 1775, in _run_once
handle._run()
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/asyncio/events.py", line 88, in _run
self._context.run(self._callback, *self._args)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/ipykernel/kernelbase.py", line 508, in dispatch_queue
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/ipykernel/kernelbase.py", line 497, in process_one
'language_info': self.language_info,
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/ipykernel/kernelbase.py", line 404, in dispatch_shell
# FIXME: on rare occasions, the flush doesn't seem to make it to the
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/ipykernel/kernelbase.py", line 728, in execute_request
while True:
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/ipykernel/ipkernel.py", line 390, in do_execute
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/ipykernel/zmqshell.py", line 528, in run_cell
)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 2915, in run_cell
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 2960, in _run_cell
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/IPython/core/async_helpers.py", line 78, in _pseudo_sync_runner
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3186, in run_cell_async
except Exception:
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3377, in run_ast_nodes
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3457, in run_code
File "/var/folders/y8/4bdyq9hn6p58g8jy30g6vk000000gn/T/ipykernel_85241/1014936592.py", line 4, in <module>
history = model.fit([train.user_id, train.public_id], train.visit, epochs=5, verbose=1)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/utils/traceback_utils.py", line 64, in error_handler
return fn(*args, **kwargs)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/engine/training.py", line 1409, in fit
tmp_logs = self.train_function(iterator)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/engine/training.py", line 1051, in train_function
return step_function(self, iterator)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/engine/training.py", line 1040, in step_function
outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/engine/training.py", line 1030, in run_step
outputs = model.train_step(data)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/engine/training.py", line 889, in train_step
y_pred = self(x, training=True)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/utils/traceback_utils.py", line 64, in error_handler
return fn(*args, **kwargs)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/engine/training.py", line 490, in __call__
return super().__call__(*args, **kwargs)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/utils/traceback_utils.py", line 64, in error_handler
return fn(*args, **kwargs)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/engine/base_layer.py", line 1014, in __call__
outputs = call_fn(inputs, *args, **kwargs)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/utils/traceback_utils.py", line 92, in error_handler
return fn(*args, **kwargs)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/engine/functional.py", line 459, in call
inputs, training=training, mask=mask)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/engine/functional.py", line 596, in _run_internal_graph
outputs = node.layer(*args, **kwargs)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/utils/traceback_utils.py", line 64, in error_handler
return fn(*args, **kwargs)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/engine/base_layer.py", line 1014, in __call__
outputs = call_fn(inputs, *args, **kwargs)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/utils/traceback_utils.py", line 92, in error_handler
return fn(*args, **kwargs)
File "/Users/xxx/.pyenv/versions/3.7.3/lib/python3.7/site-packages/keras/layers/core/embedding.py", line 199, in call
out = tf.nn.embedding_lookup(self.embeddings, inputs)
Node: 'model_10/content-Embedding/embedding_lookup'
indices[10,0] = 21530 is not in [0, 21025)
[[{{node model_10/content-Embedding/embedding_lookup}}]] [Op:__inference_train_function_6328]
I have tried changing the embedding dimensions, etc but no luck. Could it be that this model is not addapted to boolean data? Could I use another model? Or is the problem lying elsewhere?
Thank you?