python报错:ValueError: reached ``x=0`` after 0 iterations

问题遇到的现象和发生背景

python报错:ValueError: reached x=0 after 0 iterations

问题相关代码,请勿粘贴截图

复现代码https://github.com/haimiaozh/MetaInv-Net
operator的定义:

operator = odl.tomo.RayTransform(space, geometry,impl='astra_cuda'

报错语句:


x_norm = x.norm()
 if x_norm == 0:
         raise ValueError('reached ``x=0`` after {} iterations'.format(i))
运行结果及报错内容

报错内容:

Traceback (most recent call last):
  File "/root/autodl-tmp/MetaInv-Net-main/main.py", line 17, in <module>
    train = Trainer(args, model, tr_dset=tr_dataset)
  File "/root/autodl-tmp/MetaInv-Net-main/trainer/train.py", line 18, in __init__
    self.proj, self.back_proj, _, self.op_norm = self.tr_dset.radon_op()
  File "/root/autodl-tmp/MetaInv-Net-main/data_loader/dataset.py", line 38, in radon_op
    op_norm=odl.operator.power_method_opnorm(operator)
  File "/root/miniconda3/envs/my-env/lib/python3.6/site-packages/odl/operator/oputils.py", line 246, in power_method_opnorm
    raise ValueError('reached ``x=0`` after {} iterations'.format(i))
ValueError: reached ``x=0`` after 0 iterations

我的解答思路和尝试过的方法

尝试输出operator的值,它的值为RayTransform

我想要达到的结果

x是什么,print(x)或者打个断点,观察观察

嗯???
if x_norm == 0:
raise ValueError('reached x=0 after {} iterations'.format(i))

raise:手动引发的异常。
你自己用raise抛出的一个异常啊

不太清楚 odl 库的内容,不过我大胆猜测这个 norm 的问题是由于 RayTransform 中的参数 spacegeometry 的问题,他们让这个 norm 的计算为零,进而使迭代算法报错。建议检查这两个参数是不是出现了为零的问题。

在format(i)中i有定义吗

打断点会吗,多写几个Print看看