0

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?

psyvic
  • 29
  • 4
  • Graph Execution Error does not say anything, include the complete traceback in your question, it will contain the full error message. – Dr. Snoopy Jun 13 '22 at 10:10
  • I updated it with the whole error traceback, thanks – psyvic Jun 13 '22 at 10:21
  • Read here: Node: 'model_10/content-Embedding/embedding_lookup' indices[10,0] = 21530 is not in [0, 21025), your embedding input indices are larger than the vocabulary. – Dr. Snoopy Jun 13 '22 at 10:23
  • I see, thank you! but where is this 21530 coming from? I define the content embedding with the number of unique_contents + 1 to precisely avoid this issue – psyvic Jun 13 '22 at 10:37
  • it comes from one of your inputs, it even says its the [10,0] sample. – Dr. Snoopy Jun 13 '22 at 10:39
  • Awesome, thank you! Its not working as expected. If you add it as an answer I can mark it as the right answer to get you the recognition you deserve ;) – psyvic Jun 13 '22 at 11:08

0 Answers0