operation does not have an identity

x33g5p2x  于2022-08-17 转载在 其他  
字(2.0k)|赞(0)|评价(0)|浏览(327)

cascadeRCNN训练报这个异常:

使用TripletLoss出现RuntimeError: operation does not have an identity.避坑

我训练fasterrcnn时,也报了这个错:

跟后cascadeRCNN的异常基本类似,data_loader设置 shuffle=True好像没有报这个错了。

cascadeRCNN训练报这个异常:

用detecteon2训练cascadeRCNN,本来想跑个小数据集看看能不能跑通,但跑200~300个iter就会报如下错误:
RuntimeError: cannot perform reduction function argmax on a tensor with no elements because the operation does not have an identity

其实是./modeling/roi_heads/cascade_rcnn.py中175行运行self._run_stage(features, proposals, k)时出错了,预测出了空的predictions.

再一想,突然想到,可能是我的batchsize=1导致的(不用cascadeRCNN的时候batchsize=1没出过错…)

把batchsize改大一点,立即解决…

影响_run_stage输出结果的还有ROI_HEADS.ROI_BOX_CASCADE_HEAD.IOUS (list)参数,这个设置了每个阶段的阈值。 上面参数的0-th元素要与ROI_HEADS.IOU_THRESHOLDS的值相同。

原文链接:https://blog.csdn.net/weixin_44210775/article/details/108234791

使用TripletLoss出现RuntimeError: operation does not have an identity.避坑

Triplet loss的优势在于细节区分,即当两个输入相似时,Triplet loss能够更好地对细节进行建模,相当于加入了两个输入差异性差异的度量,学习到输入的更好表示。常用在人脸识别任务中。目的是做到非同类极相似样本的区分,比如说对兄弟二人的区分。

用到我的这个数据上时候发现训练集可以正常运行,但是很奇怪测试集上总是不是,看他其他博客说到更改batchsize等,但是惊奇发现当训练集加载数据为shuffle=True时候,就会像测试集上情况一样。

因此考虑:Triplet loss是用于输入差异性的度量,当我不将数据打乱时候,就会存在operation does not have an identity

def load_training(root_path, dir, batch_size):
    transform = transforms.Compose(
        [transforms.Resize([224, 224]),
         transforms.Grayscale(1),
         transforms.ToTensor(),
         transforms.Normalize([0.485],
                              [0.229])#
         ])
    data = datasets.ImageFolder(root=os.path.join(root_path, dir), transform=transform)
    train_loader = torch.utils.data.DataLoader(data, batch_size=batch_size, shuffle=True, drop_last=True)
    class_label = data.classes
    return train_loader, class_label
 
def load_testing(root_path, dir, batch_size):
    transform = transforms.Compose(
        [transforms.Resize([224, 224]),
         transforms.Grayscale(1),
         transforms.ToTensor(),
         transforms.Normalize([0.485],
                              [0.229])#
         ])
    data = datasets.ImageFolder(root=os.path.join(root_path, dir), transform=transform)#
    test_loader = torch.utils.data.DataLoader(data, batch_size=batch_size, shuffle=True)
    return test_loader

————————————————
版权声明:本文为CSDN博主「qq_40929682」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40929682/article/details/124760625

相关文章