ValueError: total size of new array must be unchanged

   在对数据增强后的faster rcnn中进行训练时,出现这个错误,原因是在lib/roi_data_layer/layer.py中,会出现

inds = np.reshape(inds, (-1,2))
因此有效的roidb需为偶数。
参考https://github.com/rbgirshick/py-faster-rcnn/issues/61可处理数据奇偶问题
#inds = np.reshape(inds, (-1, 2))
    #row_perm = np.random.permutation(np.arange(inds.shape[0]))
    #inds = np.reshape(inds[row_perm, :], (-1,))

    # consider the case when len(inds) is odd
    isodd = len(inds) % 2
    if not isodd:
        inds = np.reshape(inds, (-1,2))
    else:
        tail = inds[-1]
        inds = np.reshape(inds[:-1], (-1,2))
    row_perm = np.random.permutation(np.arange(inds.shape[0]))
    inds = np.reshape(inds[row_perm, :], (-1,))
    if isodd:
        inds = np.append(inds, tail)
    self._perm = inds

 

 

转载于:https://www.cnblogs.com/573177885qq/p/7372630.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误是因为你试图改变一个数组的大小,但是新数组的总大小必须与原数组的总大小相同。例如,如果你有一个形状为(3,4)的数组,它有12个元素,你不能将其大小更改为(2,6),因为新数组的总大小为12,与原数组的总大小相同。你需要确保新数组的大小与原数组的大小相同。 ### 回答2: "valueerror: total size of new array must be unchanged"是NumPy中的一个错误提示,意思是新数组的总大小必须与原数组的总大小保持一致。 这个错误通常发生在使用NumPy的reshape方法时。当我们想要改变数组的形状时,我们可以使用reshape方法来实现。但是在使用reshape方法时,需要保证新数组的总大小与原数组的总大小一致,如果不一致就会出现该错误。 举个例子,假设我们有一个数组arr,其形状为(4, 5),总共有20个元素。如果我们想将其转换为形状为(2, 10)的新数组,我们可以使用reshape方法进行转换。但是如果我们想将其转换为形状为(3, 7)的新数组,就会出现"valueerror: total size of new array must be unchanged"的错误提示,因为新数组的总大小与原数组的总大小不一致。 为了解决这个错误,我们必须确保在使用reshape方法时,新数组的总大小与原数组的总大小一致。可以通过计算原数组的总大小来确定新数组的形状,或者通过调整新数组的形状来使其与原数组的总大小一致。 ### 回答3: valueerror: total size of new array must be unchanged 是一个Python语言中的错误提示信息。它表示在创建一个新的数组时,新数组的总大小必须与原数组的总大小相同。 在Python中,我们可以使用NumPy库来操作数组。当我们尝试创建一个新的数组时,如果新数组的大小与原数组的大小不一致,就会出现该错误。 造成这个错误的原因通常是在计算新数组的大小时出现了错误。比如,我们可能使用了错误的维度大小或者计算新数组的大小时忽略了某些维度。 要解决这个错误,我们需要检查代码中与数组大小相关的部分,确认数组的维度和大小的计算是正确的。我们可以使用NumPy库提供的函数来获取原数组的大小,然后在创建新数组时使用相同的维度和大小。 例如,如果我们要创建一个与原数组大小相同的新数组,可以使用以下代码: ```python import numpy as np # 假设原数组是arr arr = np.array([[1, 2, 3], [4, 5, 6]]) # 获取原数组的大小 size = arr.size # 创建新数组,大小与原数组相同 new_arr = np.zeros(size).reshape(arr.shape) ``` 在这个例子中,我们首先使用arr.size获取了原数组的大小,然后使用np.zeros创建一个大小为size的全零数组,并使用reshape方法将其调整为与原数组arr相同的维度。 通过检查与数组大小相关的部分,并根据需要进行相应的修复,我们可以解决 valueerror: total size of new array must be unchanged 这个错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值