问题描述
在使用 TensorFlow 时,很多人会碰到如下错误:
InvalidArgumentError: indices[?] = ?, which is not in [0, ?)
这里的"?"是指可能出现的问题的位置和数量,具体出错位置和数量是不确定的。这个问题的出现通常是由于构建模型时出现了错误,与数据的位置有关。
解决办法
针对这个错误,我们可以从以下两个方面入手:
检查数据
检查数据的位置是否正确且没有超出范围,这是最常见的错误。请确保输入数据集的形状和标签的形状是一致的,并且没有超出数据的范围。这个问题的常见原因是由于输入数据的形状与模型或者标签的形状不一致,或者数据中出现了异常值。
检查代码
检查代码是否正确,尤其是涉及到张量操作的代码,比如使用了 tf.gather() 或者 tf.scatter()。这种错误通常是由于张量的形状或者类型不一致,或者在进行张量操作时出现了错误。
另外,还可以通过打印输出来查看数据、形状,以及特定操作的结果,这样能够更方便地找到错误。";
例如:
import tensorflow as tf
import numpy as np
a = tf.constant(np.arange(9))
b = tf.gather(a, [[1,2], [2,3]])
with tf.Session() as sess:
print(sess.run(b))
运行这段代码会抛出如下错误:
InvalidArgumentError: indices[1,1] = 3 is not in [0, 9)
这是由于我们在 tf.gather() 的参数中,对第二维进行了操作,但是张量 a 只有一个维度,没有第二维。因此我们需要对张量 a 进行 reshape 操作,使其变成二维张量:
import tensorflow as tf
import numpy as np
a = tf.constant(np.arange(9).reshape((3,3)))
b = tf.gather(a, [[1,2], [2,3]])
with tf.Session() as sess:
print(sess.run(b))
这里,我们把 a 变成了一个 3 x 3 的张量,再进行 tf.gather() 操作。
结论
总之,出现 "InvalidArgumentError: indices[?] = ?, which is not in [0, ?)" 的问题,大多数情况下是由于数据输入或者代码错误导致的,解决方法是先检查数据然后再检查代码。同时,可以通过打印输出来帮助找到问题所在。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解TensorFlow报”InvalidArgumentError: indices[?] = ?, which is not in [0, ?) “的原因以及解决办法 - Python技术站