错误:
TypeError: unsupported operand type(s) for /: 'Dimension' and 'int', please use // instead
问题:
使用tf.py_function()调用numpy函数时,执行出错。numpy函数出错代码如下:
def cal(boxes):
N = boxes.shape[0]
N1 = np.arange(N)
导致错误的代码是np.arange(N)。出错的原因是N的类型在tf中不是int,而是<class ‘tensorflow.python.framework.tensor_shape.Dimension’>
解决方案:
N = boxes.shape[0].value
# or
N = int(boxes.shape[0])
This line
self._num_examples = data.shape[0]
returns an int
if data is a numpy array:
np_data = np.random.randn(10,10)
np_ans = np_data.shape[0]
print(type(np_ans))
>>> <class 'int'>
but if data is a tf.Variable :
tf_data = tf.Variable(np.random.randn(10,10), dtype=tf.float32)
tf_ans = tf_data.shape[0]
print(type(tf_ans))
>>> <class 'tensorflow.python.framework.tensor_shape.Dimension'>
an instance of tensor_shape.Dimension
is returned which can then not be used by np.arrange()
here:
---> 59 idx = np.arange(0, self._num_examples)
because np.arrange()
requires int
arguments.
As a quick fix, try swapping
self._num_examples = data.shape[0]
to
self._num_examples = data.shape[0].value