ValueError: Invalid type <class ‘numpy.int32‘> for the flop count,Please use a wider type to avoid

        在使用fvcore模块计算模型的flops时,遇到了标题中的问题,记录一下解决方案。

        首先是在jit_analysis.py的589行出错。经过调试发现,op_counts.values()的类型是int32,但是计算要求的类型只能是int、float、np.float64和np.int64,因此需要做如下修改:

                inputs, outputs = list(node.inputs()), list(node.outputs())
                op_counts = self._op_handles[kind](inputs, outputs)
                if isinstance(op_counts, Number):
                    op_counts = float(op_counts)  # 手动进行强制转换
                    op_counts = Counter({self._simplify_op_name(kind): op_counts})
                for v in op_counts.values():
                    if not isinstance(v, (int, float, np.float64, np.int64)):
                        raise ValueError(
                            f"Invalid type {type(v)} for the flop count! "
                            "Please use a wider type to avoid overflow."
                        )

        添加了注释的部分为我手动修改。

        然后,在jit_handles.py处有一个警告,意思是:变量的范围不够大,值出现了溢出(这可能会导致最终计算结果为0)。解决方案在https://github.com/facebookresearch/fvcore/issues/104

        如果进不去github,改进代码如下:

try:
    from math import prod
except ImportError:
    from numpy import prod as prodnp  # 修改


def prod(x):  # 新增
    return int(prodnp(x))

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值