mini_batch 中在特征的层面拉近同类内积 推远异类内积

news/2024/7/4 7:28:18

在mini  batch中,我要返回一个(batch_size, dim)尺寸的张量,然后计算相同类别之间的平均内积,和异类之间的平均内积。

这里其实有一点可以考虑,咱们到底是将内积作为目标函数来优化好,还是将距离作为目标函数来优化好呢?

如果是内积的话,同类的好说,同类之间的内积越接近1越好,异类之间的内积,是接近0好,还是-1好呢?这确实是一个问题。

在我下面的代码中,我是将异类的内积设计为-1为目标值了,注意,送到Pull_Push_Features_loss 中的特征参数已经是经过二范数规范后的了。

class Pull_Push_Features_loss(nn.Module): #特征拉近推远损失 
    def __init__(self):
        super(Pull_Push_Features_loss,self).__init__()

    def forward(self,features, batch_size, person_num):#features是经过renorm(2,0,1e-5).mul(1e5)后的特征,尺寸为(batch_size,dim),dim为特征的长度,person_num为每个label具有的图片数量,用这种损失函数,在训练的时候,送入网络的数据都是N*K形式的组合。
        ID_num = batch_size // person_num #计算一共有多少个label
        loss_all = 0

        pull_distance_all = 0#计算相同label之间的平均内积,目标为1最好,所以用了1-distance
        for id_index in range(ID_num):
            features_temp_list = features[id_index * person_num:(id_index + 1) * person_num ]
            loss_temp = 0
            distance = torch.mm(features_temp_list, features_temp_list.t())
            distance = 1 - distance
            pull_distance_all = pull_distance_all + distance.sum()
        pull_distance_avg = pull_distance_all / ( ID_num * ( person_num * (person_num-1) ) )


        dif_ID_features = features[0:1]
        for i in range(1,ID_num):
            dif_ID_features = torch.cat( (dif_ID_features, features[i*person_num:i*person_num + 1] ), 0 )
        mat_similary = torch.mm(dif_ID_features, dif_ID_features.t())
        push_similary_all = torch.sum(mat_similary) - ID_num
        push_similary_avg = push_similary_all / ( ID_num * ID_num - ID_num )

        loss = pull_distance_avg + push_similary_avg
        return loss

我想了想,其实也没那么多事,就是我用了余弦距离作为衡量标准而已


http://www.niftyadmin.cn/n/3657745.html

相关文章

微软发布VS.NET 2003 SP1

微软发布VS.NET 2003 SP1微软8/17发布VS.NET 2003 SP1,即日起可供下载在等待一段漫长时间后,VS.NET 2003终于发布了Service Pack 1更新,而其主要包含了:*自从VS .NET 2003上市以来的HotFixs*安全性更新*重要修正*Visual Studio Te…

关于余弦距离的思考

在做特征之间的距离度量的时候,可以使用欧式距离,也可以使用余弦距离,那么如果是余弦距离的话,异类之间的距离,将距离的目标设置为0,还是设置为-1作为目标距离比较好呢?这是一个问题&#xff0c…

ASP.NET 2.0网站专案同时使C#与VB.NET之技巧(新书连载)

ASP.NET 2.0网站专案同时使C#与VB.NET之技巧(新书连载)你知道专案ASP.NET 2.0网站要如何同时使用C#与VB.NET两种语言及多组件的技巧吗?节录自【圣殿祭司的ASP.NET 2.0专家技术手册】新书在以往VS.NET 2002及VS.NET 2003的Visual Studio工具本…

行人重识别分类总结

一.总体说明 行人重识别,可以简化为这样的过程:将原始图片数据进行特征提取,之后送入目标函数并对其进行优化。这个过程涉及三个重要部分:数据、特征、目标函数。因此将REID方法,根据研究的关注点&#xf…

C#版的My物件(新书连载)

C#版的My物件(新书连载)My物件是VB.NET下的物件,所以C#不能使用My物件,所有专家都是这么说的,但祭司要推翻它,祭司要教你威力无上的秘密咒术,彻底破解My物件在C#环境下的使用方式!节…

LINQ与ADO.NET 3.0的创新

LINQ与ADO.NET 3.0的创新你知道微软下一代ADO.NET 3.0资料存取技术的重大创新与改革吗?为了让各位预览未来的ADO.NET 3.0技术,虽然祭司最近一直在忙碌于ASP.NET 2.0出版事宜,但是还是不能荒废引领各位迈向最新指术的伟大宗旨,而这…

特征比对常用的距离度量方式

Jaccard相似度:sim(A,B)(A∩B)/(A∪B) 基于内积相似度sim(x,q)q^⊤ v

ASP.NET 2.0的编译模型(新书连载)

ASP.NET 2.0的编译模型(新书连载)ASP.NET 2.0支持两种编译模型(Compilation Model),一为动态编译(Dynamic Compilation),另一个为先行编译(Precompilation)。…