[TensorFlow] TypeError: unsupported operand type(s) for /: ‘Dimension‘ and ‘int‘

161 篇文章 7 订阅
98 篇文章 4 订阅

错误:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值