Neural Networks for Multi-Instance Learning的复现与思考

准确率:0.8478260869565217。

原理:

从深度学习模型中选出一个输出值进行优化。即正包中选出最大值的去让网络拟合他。负包中选出最大值去近似0。

缺点:

模型自己选择最像正包的标签可能会导致模型错误识别正类。模型好像随着训练在验证集的准确率增加。并未过拟合。好像被没有受其影响。

没加BN层隐藏层需要较多的神经元。没有BN层好像也可以。

relu激活函数解决了梯度消失,但是没有解决梯度爆炸。

思考:
BN层非常影响训练速度,有时会导致模型的准确率降低。

程序:

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
network=nn.Sequential(nn.Linear(166,80),nn.Sigmoid(),nn.Linear(80,1),nn.Sigmoid())
#network=nn.Sequential(nn.BatchNorm1d(166),nn.Linear(166,2),nn.Softmax(dim=1))
w=nn.BatchNorm1d(166)

optimizer = optim.Adam(network.parameters(), lr=0.00004)
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(j.T)
val_bag_lable.append(1)
for i in m1[‘neg_bag’]:
for j in i:
val_bag.append(j.T)
val_bag_lable.append(0)
for i in m[‘pos_bag’]:
for j in i:
train_bag.append(j.T)
train_bag_lable.append(1)
for i in m[‘neg_bag’]:
for j in i:
train_bag.append(j.T)
train_bag_lable.append(0)
t=0.1
for j in range(5000):
r=0
e=0
er=0
acc=0
sum=0
network.train()
for i in range(len(train_bag)):

    if train_bag_lable[i]==0:
        sum=sum+1
        y=network(torch.Tensor(train_bag[i]))
        index=torch.argmax(y[:])
        l1=0.5*(y[index]-0)**2
        l1.backward()
        Y = torch.ge(y, 0.5).float()
        er=er+l1.cpu().mean()
        if 1 not in torch.ge(y[:], 0.5).float():
            acc=acc+1
    if train_bag_lable[i]==1:
        sum=sum+1
        y=network(torch.Tensor(train_bag[i]))
        #然后选出最大的
        index=torch.argmax(y[:])
        #l=-torch.log(y[index])
        l=0.5*(y[index]-1)**2
        l.backward()
        er=er+l.cpu()
        if 1 in torch.ge(y[:], 0.5).float():
            acc=acc+1
optimizer.step()
optimizer.zero_grad()
gai=0
if acc/sum>1 :
    for i in range(len(train_bag)):
        if torch.Tensor(train_bag[i]).shape[0]!=1:
            y=network(torch.Tensor(train_bag[i]))
            if train_bag_lable[i]==0:
                index=torch.argmax(y[:])
                index1=torch.argmin(y[:])
                if y[index1]/y[index]<=t:
                    train_bag_lable[i]=1
                    gai=gai+1
            if train_bag_lable[i]==1:
                index=torch.argmax(y[:])
                if y[index]/(1-y[index])<=t:
                    train_bag_lable[i]=0
                    gai=gai+1
    #print(len(train_bag_lable))
    if gai<0.001*sum:
        t=t+0.1
        t=min(t,0.9)

    print("gai t",gai,t)
network.eval()
test_acc=0
for i in range(len(val_bag)):
    y=network(torch.Tensor(val_bag[i]))
    if val_bag_lable[i]==1:
        Y = torch.ge(y[:], 0.5).float()
        if 1 in Y:
            test_acc=test_acc+1
        else:
            e=e+1
    else:
        Y = torch.ge(y[:], 0.5).float()
        if 1 not in Y:
            test_acc=test_acc+1
        else:
            r=r+1
print(j,er,acc/sum,test_acc/len(val_bag),e,r)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
混合图神经网络用于少样本学习。少样本学习是指在给定的样本数量非常有限的情况下,如何进行有效的学习和分类任务。混合图神经网络是一种结合了图神经网络和其他模型的方法,用于解决少样本学习问题。 首先,混合图神经网络将图神经网络与其他模型结合起来,以充分利用它们在不同任务上的优势。图神经网络可以有效地处理图结构数据,并捕捉节点之间的关系,而其他模型可能在处理其他类型的数据时更加优秀。通过将它们结合起来,混合图神经网络可以在少样本学习中更好地利用有限的数据。 其次,混合图神经网络可以通过在训练过程中使用一些预训练模型来提高学习效果。预训练模型是在大规模数据集上进行训练得到的模型,在特定任务上可能有较好的性能。通过将预训练模型与图神经网络结合,混合图神经网络可以在少样本学习中利用预训练模型的知识,以更好地适应有限的数据。 最后,混合图神经网络还可以通过设计适当的注意力机制来提高学习效果。注意力机制可以使网络更加关注重要的特征和关系,忽略无关的信息。在少样本学习中,选择性地关注有限的样本和特征对于提高学习的效果至关重要。混合图神经网络可以通过引入适当的注意力机制来实现这一点,以提取和利用关键信息。 综上所述,混合图神经网络是一种用于少样本学习的方法,它结合了图神经网络和其他模型的优势,并利用预训练模型和适当的注意力机制来提高学习效果。这种方法对于在有限数据条件下执行有效的学习和分类任务非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值