思考
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