将对流层权重(N,C,H,W)乘以Logits(H,W)pytorch

myss37ts  于 2023-01-05  发布在  Git
关注(0)|答案(1)|浏览(173)

我实现的文件Deep multiscale convolutional feature learning for weakly supervised localization of chest pathologies in X-ray images根据我的理解,层相关性权重属于每个密集块的最后一层.
我尝试实现如下所示的权重约束:

def weight_constraints(self):

        weights= {'feat1': self.model.features.denseblock2.denselayer12.conv2.weight.data,
            'feat2':self.model.features.denseblock3.denselayer24.conv2.weight.data,
            'feat3':self.model.features.denseblock4.denselayer16.conv2.weight.data}

        sum(weights.values()) == 1

        for i in weights.keys():
            w = weights[i]    
            w1 = w.clamp(min= 0)
            weights[i] = w1
        return weights

 weights= self.weight_constraints()
        for i in weights.keys():
            w = weights[i]
            l = logits[i]
            p = torch.matmul(w , l[0])
            sum = sum + p

其中,logits是一个字典,其中包含每个数据块的FC层外数据,如图所示。
logits ={"特征1 ":[Tensor(-0.0630,...确认0〉)],'特征2':[Tensor(-0.0323,...确认0〉)],'特征3':[Tensor([[-8.2897e -06...ackward0〉)]}
出现以下错误:
mat1和mat2形状不能相乘(12288x3和1x1)
这是正确的做法吗?

mftmpeh8

mftmpeh81#

论文指出
来自所有层的logit响应具有相同的维度(等于分类的类别数),并且现在可以使用类别特定的convex combination来组合以获得类别pc的概率得分。
您使用的函数matmul执行矩阵乘法,它需要mat1.shape[-1] == mat2.shape[-2]
如果假设sum(w)==1torch.all(w > 0),则可以将l的凸组合计算为(w * l).sum(-1),它是wl元素的乘积,在l的批维度上广播,并且需要w.shape[-1] == l.shape[-1](假定为3)。
如果你想继续使用matmul,你可以给wl增加一个维度,然后把向量积当作矩阵乘法来执行:一米一米一。

相关问题