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
中的参数 space
和 geometry
的问题,他们让这个 norm 的计算为零,进而使迭代算法报错。建议检查这两个参数是不是出现了为零的问题。
在format(i)中i有定义吗
打断点会吗,多写几个Print看看