对机器学习、fastai、pytorch 和 python 来说非常陌生,我试图在手动修改图像后调整 LearnerCallback 来进行转换。当我开始我的 learn.fit_one_cycle 时,它会立即中断,如下所示:
我试过坚持.to(torch.device('cuda'))
我能想到的所有地方
#...
def on_batch_begin(self, last_input, last_target, train, **kwargs):
if not train: return
#Get new input
new_input = last_input.clone()
new_target = last_target.clone()
tfms = get_transforms(max_zoom=1.5)
# modify the images here in some other way
# apply_tfms
for i in range(len(new_input)):
new_input[i] = Image(new_input[i]).apply_tfms(tfms[0]).data
new_target[i] = Image(new_target[i]).apply_tfms(tfms[0], do_resolve=False).data
#...
倒数第二行中的“apply_tfms”是回溯中的罪魁祸首,其结尾为:
553 m[1,0] *= w/h
554 c.flow = c.flow.view(-1,2)
--> 555 c.flow = torch.addmm(m[:2,2], c.flow, m[:2,:2].t()).view(size)
556 return c
557
RuntimeError: Expected object of backend CUDA but got backend CPU for argument #4 'mat1'
有没有一种方法可以在 LearnerCallback 中应用转换而不会出现该错误,或者有一种替代方法可以在 apply_tfms 在修改后的输入和目标图像上运行相同的转换之前添加我的 LearnerCallbacklearn.callback_fns.append
以运行?我需要来自目标图像的像素信息来修改输入图像。我还需要在培训和验证期间应用此过程。
如果它有任何区别,即使我没有在 apply_tfms 之前修改克隆的图像,我也会得到相同的错误。