PyTorch 报错:TypeError: exceptions must derive from BaseException
其实是个低级错误,我个人认为是因为没有找到要运行的载体。以自己的代码为例:
我在 base_options.py 里面设置 --netG 的参数只能在这几个里面选择:
self.parser.add_argument('--netG', type=str, default='p2hed', choices=['p2hed', 'refineD', 'p2hed_att'], help='selects model to use for netG')
但是我在选择 netG 时的代码写成了:
def define_G(input_nc, output_nc, ngf, netG, n_downsample_global=3, n_blocks_global=9, n_local_enhancers=1,
n_blocks_local=3, norm='instance', gpu_ids=[]):
norm_layer = get_norm_layer(norm_type=norm)
if netG == 'p2hed':
netG = DDNet_p2hED(input_nc, output_nc, ngf, n_downsample_global, n_blocks_global, norm_layer)
elif netG == 'refineDepth':
netG = DDNet_RefineDepth(input_nc, output_nc, ngf, n_downsample_global, n_blocks_global, n_local_enhancers, n_blocks_local, norm_layer)
elif netG == 'p2h_noatt':
netG = DDNet_p2hed_noatt(input_nc, output_nc, ngf, n_downsample_global, n_blocks_global, n_local_enhancers, n_blocks_local, norm_layer)
else:
raise('generator not implemented!')
#print(netG)
if len(gpu_ids) > 0:
assert(torch.cuda.is_available())
netG.cuda(gpu_ids[0])
netG.apply(weights_init)
return netG
注意,这里没没有 ‘rfineD’ 这个选项,所以当运行代码时,程序找不到 netG 该选择那个网络,故而报错。
其实,把上面那个代码里面的 “ elif netG == 'refineDepth': ” 改成 “elif netG == 'refineD':” 就可以了。