【发布时间】:2021-03-26 01:01:24
【问题描述】:
我正在尝试在本网站https://www.kaggle.com/bsagredo/anime-neuralmf-hybrid-recommender/notebook 的互联网上找到的代码
我在使用 keras 时遇到了这段代码的问题:
def get_model(num_users, num_items, num_item_feats, mf_dim, layers = [64, 32, 16, 8]):
user_input = Input(shape=(1,), dtype='int32', name = 'user_input')
item_input = Input(shape=(1,), dtype='int32', name = 'item_input')
feats_input = Input(shape=(num_item_feats,), dtype='float32', name = 'feats_input')
# User&Item Embeddings for Matrix Factorization
MF_Embedding_User = Embedding(input_dim = num_users + 1, output_dim = mf_dim,
name = 'user_embedding',
embeddings_initializer = RandomNormal(stddev=0.001),
input_length = 1)
MF_Embedding_Item = Embedding(input_dim = num_items + 1, output_dim = mf_dim,
name = 'item_embedding',
embeddings_initializer = RandomNormal(stddev=0.001),
input_length = 1)
# User&Item Embeddings for MLP part
MLP_Embedding_User = Embedding(input_dim = num_users + 1, output_dim = int(layers[0] / 2),
name = 'mlp_embedding_user',
embeddings_initializer = RandomNormal(stddev=0.001),
input_length = 1)
MLP_Embedding_Item = Embedding(input_dim = num_items + 1, output_dim = int(layers[0] / 2),
name = 'mlp_embedding_item',
embeddings_initializer = RandomNormal(stddev=0.001),
input_length = 1)
mf_user_latent = Flatten()(MF_Embedding_User(user_input))
mf_item_latent = Flatten()(MF_Embedding_Item(item_input))
mf_vector = Multiply()([mf_user_latent, mf_item_latent])
# MLP part with item features
mlp_user_latent = Flatten()(MLP_Embedding_User(user_input))
mlp_item_latent = Flatten()(MLP_Embedding_Item(item_input))
mlp_vector = Concatenate()([mlp_user_latent, mlp_item_latent, feats_input])
for l in layers:
layer = Dense(l, activation='relu')
mlp_vector = layer(mlp_vector)
# Concatenate MF and MLP parts
predict_vector = Concatenate()([mf_vector, mlp_vector])
# Final prediction layer
prediction = Dense(1, activation = 'sigmoid',
kernel_initializer = 'lecun_uniform',
name = 'prediction')(predict_vector)
model = Model([user_input, item_input, feats_input], prediction)
return model
learning_rate = 0.001
batch_size = 256
n_epochs = 3
mf_dim = 15
layers = [128, 64, 32, 16, 8]
对于模型和训练:
model = get_model(n_users, n_anime, n_feats, mf_dim, layers)
model.compile(optimizer = Adam(lr = learning_rate), loss = 'mean_squared_logarithmic_error')
model = get_model(n_users, n_anime, n_feats, mf_dim, layers)
model.compile(optimizer = Adam(lr = learning_rate), loss = 'mean_squared_logarithmic_error')
这是按摩:
Epoch 1/3
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-35-9047b6ef7a15> in <module>
1 hist = model.fit(x = x_train, y = y_train, validation_data = (x_val, y_val),
----> 2 batch_size = batch_size, epochs = n_epochs, verbose = True, shuffle = True)
~/miniconda3/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py in _method_wrapper(self, *args, **kwargs)
106 def _method_wrapper(self, *args, **kwargs):
107 if not self._in_multi_worker_mode(): # pylint: disable=protected-access
--> 108 return method(self, *args, **kwargs)
109
110 # Running inside `run_distribute_coordinator` already.
~/miniconda3/lib/python3.7/site-packages/tensorflow/python/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, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)
1096 batch_size=batch_size):
1097 callbacks.on_train_batch_begin(step)
-> 1098 tmp_logs = train_function(iterator)
1099 if data_handler.should_sync:
1100 context.async_wait()
~/miniconda3/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in __call__(self, *args, **kwds)
778 else:
779 compiler = "nonXla"
--> 780 result = self._call(*args, **kwds)
781
782 new_tracing_count = self._get_tracing_count()
~/miniconda3/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in _call(self, *args, **kwds)
805 # In this case we have created variables on the first call, so we run the
806 # defunned version which is guaranteed to never create variables.
--> 807 return self._stateless_fn(*args, **kwds) # pylint: disable=not-callable
808 elif self._stateful_fn is not None:
809 # Release the lock early so that multiple threads can perform the call
~/miniconda3/lib/python3.7/site-packages/tensorflow/python/eager/function.py in __call__(self, *args, **kwargs)
2827 with self._lock:
2828 graph_function, args, kwargs = self._maybe_define_function(args, kwargs)
-> 2829 return graph_function._filtered_call(args, kwargs) # pylint: disable=protected-access
2830
2831 @property
~/miniconda3/lib/python3.7/site-packages/tensorflow/python/eager/function.py in _filtered_call(self, args, kwargs, cancellation_manager)
1846 resource_variable_ops.BaseResourceVariable))],
1847 captured_inputs=self.captured_inputs,
-> 1848 cancellation_manager=cancellation_manager)
1849
1850 def _call_flat(self, args, captured_inputs, cancellation_manager=None):
~/miniconda3/lib/python3.7/site-packages/tensorflow/python/eager/function.py in _call_flat(self, args, captured_inputs, cancellation_manager)
1922 # No tape is watching; skip to running the function.
1923 return self._build_call_outputs(self._inference_function.call(
-> 1924 ctx, args, cancellation_manager=cancellation_manager))
1925 forward_backward = self._select_forward_and_backward_functions(
1926 args,
~/miniconda3/lib/python3.7/site-packages/tensorflow/python/eager/function.py in call(self, ctx, args, cancellation_manager)
548 inputs=args,
549 attrs=attrs,
--> 550 ctx=ctx)
551 else:
552 outputs = execute.execute_with_cancellation(
~/miniconda3/lib/python3.7/site-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
58 ctx.ensure_initialized()
59 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
---> 60 inputs, attrs, num_outputs)
61 except core._NotOkStatusException as e:
62 if name is not None:
InvalidArgumentError: indices[107,0] = 9998 is not in [0, 9937)
[[node functional_3/user_embedding/embedding_lookup (defined at <ipython-input-32-9047b6ef7a15>:2) ]] [Op:__inference_train_function_3295]
Errors may have originated from an input operation.
Input Source operations connected to node functional_3/user_embedding/embedding_lookup:
functional_3/user_embedding/embedding_lookup/2886 (defined at /home/xubuntu/miniconda3/lib/python3.7/contextlib.py:112)
Function call stack:
train_function
我尝试在谷歌上搜索错误,但没有找到任何解决方案。我希望任何人都可以帮助解决这个问题。
【问题讨论】:
标签: python python-3.x tensorflow keras