首页 > 其他分享 >A Framework for Multiple-Instance Learning的复现与思考

A Framework for Multiple-Instance Learning的复现与思考

时间:2022-11-03 10:33:49浏览次数:49  
标签:lable Multiple val bag torch Instance train Learning append

思考

1.任何都是基于假设去处理数据。本文的假设就是出现一点在正包的交点中。假设是正包交于一点且该点距离所有的包距离最短。

遇到的问题:

1.我想找一点尽可能降低该点与正包的距离。未实现。只是采用了简单的欧式距离。

2.如果对musk数据未做任何处理,会导致e的x次幂直接为0。

复现代码:

from enum import auto from scipy.io import loadmat import numpy as np import torch import torch.utils.data as data_utils from torch import nn import torch.optim as optim m = loadmat(r"musk_2_original.mat") daaa=m.keys() from torch import nn x=torch.ones(1, 166, requires_grad=True) x=x*100 x=torch.tensor(x,requires_grad=True) optimizer = optim.Adam({x}, lr=4) scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=500, gamma=0.1) m1 = loadmat(r"musk_1_original.mat") val_bag=[] val_bag_lable=[] train_bag=[] train_bag_lable=[] for i in m1['pos_bag']:     for j in i:         val_bag.append(torch.Tensor(j.T))         val_bag_lable.append(1) for i in m1['neg_bag']:     for j in i:         val_bag.append(torch.Tensor(j.T))         val_bag_lable.append(0) for i in m['pos_bag']:     for j in i:         train_bag.append(torch.Tensor(j.T))         train_bag_lable.append(1) for i in m['neg_bag']:     for j in i:         train_bag.append(torch.Tensor(j.T))         train_bag_lable.append(0) for j in range(5000):     l=0     optimizer.zero_grad()     for i in range(len(train_bag)):         p=0         li=[]         if train_bag_lable[i]==1:             for m in range(len(train_bag[i])):                 w=torch.sqrt(torch.sum((train_bag[i][m]-x)**2))                 li.append(w)                 p=p+w             #print("min",min(li))         if train_bag_lable[i]==0:             for m in range(len(train_bag[i])):                 w=torch.sqrt(torch.sum((train_bag[i][m]-x)**2))                 p=p+w         l=l+p     l.backward()     optimizer.step()     test_acc=0     dist=0     pos=0     neg=0     for i in range(len(val_bag)):         for m in range(len(val_bag[i])):             k1=torch.sqrt(torch.sum((val_bag[i][m]-x)**2))             if m==0:                 dist=k1             else:                 if dist>k1:                     dist=k1         if dist<1000:             if val_bag_lable[i]==1:                 test_acc=test_acc+1                 pos=pos+1         elif val_bag_lable[i]==0:                 test_acc=test_acc+1                 neg=neg+1   #        if val_bag_lable[i]==1:     #            print("dist",dist)           print("epoch",j,"loss",l,"acc",test_acc/len(val_bag),"pos",pos,"neg",neg)

标签:lable,Multiple,val,bag,torch,Instance,train,Learning,append
From: https://www.cnblogs.com/hahaah/p/16853596.html

相关文章