InvalidArgumentError(请参阅上面的回溯):indexs [47,6] = 24不在[0,23)

时间:2019-07-04 14:41:58

标签: tensorflow indices

我正在尝试运行以下main.py文件,并且持续收到错误“ InvalidArgumentError(请参见上文,回溯):indexs [138,4] = 23不在[0,23)中”。我已经检查了我的vocab文件。它内有23个字。 对于插入的一行新数据,该代码工作正常,但是当数据连续或更多时,会弹出此错误。请帮助我纠正此问题。 以下是我的代码的一小段。第5行是错误的出处。

# Word Embeddings
word_ids = vocab_words.lookup(words)
glove = np.load(params['glove'])['embeddings']  # np.array
variable = np.vstack([glove, [[0.] * params['dim']]])
variable = tf.Variable(variable, dtype=tf.float32, trainable=False)
word_embeddings = tf.nn.embedding_lookup(variable, word_ids)

1 个答案:

答案 0 :(得分:0)

希望这对您来说还不算太晚。 我搜索这个问题已有一段时间了,希望可以找到它的根源,事实证明它很简单。未解决的类似问题是herehere

机会是:您已经在某个地方看到了此嵌入代码的示例,并尝试遵循它(对我而言就是这种情况)。但是,情况是编码器和张量流 假设 表示输入的ID是顺序的。即例如,如果您有1000个商品,则您的ID为[0,1,2,3..998,999]。 但是,对于真实数据,通常情况并非如此,其中id类似于 “ xYzVryCmplxNm5m3r” (在这种情况下,它将给出错误,因为id中包含字符而tensorflow将不接受它,它仅接受整数( ),在非常微妙的情况下(可能是您的情况),id实际上是整数而不是顺序的。例如,它们可以像:ids = [68632548,15323,....]。 在这种情况下,tensorflow将接受输入数据(因为它是预期的整数)并给出此错误,因为数字不是连续的并且实际上比唯一ID的数量大得多(此数字+1通常设置为声带大小的限制)。

对我有用的解决方案是将原始数据帧中的所有id值映射到顺序ID,保留它们的唯一性,然后再次输入相同的数据(它确实有效!)。

代码可能类似于:

unique_ids=np.unique(old_ids)
sqeuential_ids=[i for i in range(len(unique_ids))]
id_mapping_dict=dict(zip(unique_ids,sqeuential_ids))

def map_ids_to_sequential(original_id):
  return id_mapping_dict[original_id]

df['ids']=df['ids'].apply(map_ids_to_sequential)