在过去的几周里,在训练我的检测模型时,我一直在努力调试这个新问题。几周前的训练效果很好,但现在我突然出现了这个闻所未闻的新错误。
我制作了我的模型,并进行了整体训练,但仍然出现了错误。
#Model
torch.set_default_dtype(torch.float)
backbone = torchvision.models.detection.fasterrcnn_mobilenet_v3_large_320_fpn(pretrained=True)
backbone.roi_heads.box_predictor.cls_score.out_features = len(classes)
backbone.roi_heads.box_predictor.bbox_pred.out_features = 4 * (len(classes))
#Training
for epoch in range(epochs):
train_one_epoch(net, optimizer, train_loader, device, epoch, print_freq=10)
evaluate(net, test_loader, device=device)
print("Time for Total Training {:0.2f}".format(time.time() - start_time))
return net
我的奇怪错误是:
—> 27 train_one_epoch(net, optimizer, train_loader, device, epoch, print_freq=10)
28 evaluate(net, test_loader, device=device)
29
/content/engine.py in train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq)
44 if not math.isfinite(loss_value):
45 print(“Loss is {}, stopping training”.format(loss_value))
—> 46 print(loss_dict_reduced)
47 sys.exit(1)
48
/usr/local/lib/python3.7/dist-packages/torch/_tensor.py in backward(self, gradient, retain_graph, create_graph, inputs)
253 create_graph=create_graph,
254 inputs=inputs)
→ 255 torch.autograd.backward(self, gradient, retain_graph, create_graph, inputs=inputs)
256
257 def register_hook(self, hook):
/usr/local/lib/python3.7/dist-packages/torch/autograd/init.py in backward(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)
147 Variable.execution_engine.run_backward(
148 tensors, grad_tensors, retain_graph, create_graph, inputs,
→ 149 allow_unreachable=True, accumulate_grad=True) # allow_unreachable flag
150
151
RuntimeError: Found dtype Double but expected Float.
我也有像这样编码的盒子和标签boxes=torch.as_tensor(盒子,dtype=torc.float32(labels=torc.as_tensor[标签,dtype=torc.int64(,我的图像是浮动张量。
如何消除此运行时错误?对于我的所有代码,包括我的数据类、导入的libs和这里的train检查,你也可以在这里看到train_one_epochs是什么样子的
谢谢你的帮助,Sarthak
我找到了问题的答案。
我有重复的engine.py文件。这个想法是,如果你正在导入一个包,那么不要制作另一个名称完全相同的文件,也不要导入。
此外,我了解到,在谷歌collab中,如果您对.py文件进行更改并重新导入,collab似乎不会注册更改。我发现工厂重新启动效果很好。
Sarthak Jain