Open hczyni opened 2 months ago
如何解决呢?哭了
您好!近期工作繁忙导致回复迟了,非常抱歉! 根据您的报错信息,代码报错主要发生在: main.py文件: loss2 = criterion2(outputs_2, labels2.long()) # cla_loss ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 以及最终报错点: unet.py文件的: self.alpha = self.alpha.gather(0, labels.view(-1)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unet.py报错点所处函数中,我使用了focal loss作为分类损失函数以应对样本不均衡情况。 根据报错信息可知是因为 labels 中的索引超出了 self.alpha(也就是 num_classes) 的大小范围,导致索引越界错误。 我所使用的数据集中的脑肿瘤共有三个类别,因此num_classes设置为3,如果您使用了您自己的数据集,也需要修改num_classes为您数据集的类别数。 为解决这一问题,您需要检查labels中的值是否是有效的索引:labels中的每个值都必须在0到num_classes-1的范围内,其中num_classes是类别的总数。 可以把unet.py文件focal_loss类forward函数的前部分改为:
def forward(self, preds, labels):
preds = preds.view(-1, preds.size(-1))
self.alpha = self.alpha.to(preds.device)
# 打印标签检查
print("Labels:", labels.view(-1))
print("Alpha:", self.alpha)
# 下面代码保持不变
您可以通过打印标签来检查是否符合要求。 希望我的解答可以帮到您,另外,祝您中秋节假日快乐!
/root/miniconda3/bin/conda run -p /root/miniconda3 --no-capture-output python /mnt/d/1/MMRAN-main/main.py --- Focal_loss alpha = 0.25 ,将对背景类进行衰减,请在目标检测任务中使用 --- Epoch 0/239
现在处理的文件为 data_seg_cl/train/3/QG12084435_20230203_178.png 现在处理的文件为 data_seg_cl/train/3/05501530_20170918_159.png 现在处理的文件为 data_seg_cl/train/2/05825711_20180803_122.png 现在处理的文件为 data_seg_cl/train/1/QG12101379_20230413_138.png 现在处理的文件为 data_seg_cl/train/3/06431063_20200623_136.png 现在处理的文件为 data_seg_cl/train/3/05623270_20180418_222.png 现在处理的文件为 data_seg_cl/train/2/QG00009028_20180629_122.png 现在处理的文件为 data_seg_cl/train/3/06840163_20210919_188.png 现在处理的文件为 data_seg_cl/train/3/QG00010544_20180803_111.png 现在处理的文件为 data_seg_cl/train/3/QG00058514_20201030_139.png 1/8608,train_loss:1.25408053,seg_loss:0.83941346,cla_loss:0.41466707 现在处理的文件为 data_seg_cl/train/3/05930003_20190221_53.png 现在处理的文件为 data_seg_cl/train/1/K09090618_20181206_112.png ../aten/src/ATen/native/cuda/ScatterGatherKernel.cu:144: operator(): block: [0,0,0], thread: [0,0,0] Assertion
train(args)
File "/mnt/d/1/MMRAN-main/main.py", line 329, in train
train_model(model, criterion, criterion2, optimizer, dataloaders, dataloader_val)
File "/mnt/d/1/MMRAN-main/main.py", line 215, in train_model
loss2 = criterion2(outputs_2, labels2.long()) # cla_loss
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/miniconda3/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1518, in _wrapped_call_impl
return self._call_impl(*args, *kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/miniconda3/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1527, in _call_impl
return forward_call(args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/d/1/MMRAN-main/unet.py", line 297, in forward
self.alpha = self.alpha.gather(0, labels.view(-1))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: CUDA error: device-side assert triggered
Compile with
idx_dim >= 0 && idx_dim < index_size && "index out of bounds"
failed. Traceback (most recent call last): File "/mnt/d/1/MMRAN-main/main.py", line 455, inTORCH_USE_CUDA_DSA
to enable device-side assertions.ERROR conda.cli.main_run:execute(49):
conda run python /mnt/d/1/MMRAN-main/main.py
failed. (See above for error)进程已结束,退出代码1