【深度学习|多实例学习】多实例学习(Multiple Instance Learning, MIL)的起源、发展和应用,附代码(二)
【深度学习|多实例学习】多实例学习(Multiple Instance Learning, MIL)的起源、发展和应用,附代码(二)
文章目录
- 【深度学习|多实例学习】多实例学习(Multiple Instance Learning, MIL)的起源、发展和应用,附代码(二)
- 多实例学习 (MIL) 概述
- 1. 起源与发展
- 6. 代码实现:基于 PyTorch 的 MIL 分类模型
- 7. 总结
- 第四届计算机、人工智能与控制工程国际学术会议 (CAICE 2025)
- 2025年计算生物学与系统生物学学术研讨会(CBSB 2025)
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
可访问艾思科蓝官网,浏览即将召开的学术会议列表。会议详细信息可参考:https://ais.cn/u/EbMjMn
多实例学习 (MIL) 概述
1. 起源与发展
多实例学习(Multiple Instance Learning, MIL)是一种机器
6. 代码实现:基于 PyTorch 的 MIL 分类模型
下面是一个简单的多实例学习分类模型的代码实现,基于 PyTorch 框架。
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, Dataset# 假设每个实例是一个长度为128的向量,袋由10个实例组成
class MILDataset(Dataset):def __init__(self, num_bags, bag_size, feature_dim):self.num_bags = num_bagsself.bag_size = bag_sizeself.feature_dim = feature_dim# 随机生成数据:num_bags个袋,每个袋含有bag_size个实例,每个实例是feature_dim维向量self.data = torch.randn(num_bags, bag_size, feature_dim)self.labels = torch.randint(0, 2, (num_bags,)) # 每个袋的标签是0或1,代表正类或负类def __len__(self):return self.num_bagsdef __getitem__(self, idx):return self.data[idx], self.labels[idx]# 定义MIL模型,使用两层全连接层和一个注意力池化层
class MILModel(nn.Module):def __init__(self, input_dim, bag_size):super(MILModel, self).__init__()self.input_dim = input_dimself.bag_size = bag_size# 定义全连接层self.fc1 = nn.Linear(input_dim, 128)self.fc2 = nn.Linear(128, 64)self.fc3 = nn.Linear(64, 1)# 注意力机制的权重参数self.attention_weights = nn.Parameter(torch.randn(bag_size, 1))def forward(self, x):# x是形状为(batch_size, bag_size, feature_dim)的输入batch_size = x.size(0)# 通过全连接层x = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))# 计算每个实例的注意力得分attention_scores = torch.matmul(x, self.attention_weights)attention_scores = torch.softmax(attention_scores, dim=1) # 使用softmax进行归一化# 计算加权池化(bag级别特征)weighted_sum = torch.sum(attention_scores * x, dim=1)# 最终分类层output = torch.sigmoid(self.fc3(weighted_sum)) # 输出一个0-1之间的值return output# 超参数设置
input_dim = 128
bag_size = 10
num_bags = 1000
batch_size = 32
epochs = 10# 数据集与数据加载器
dataset = MILDataset(num_bags, bag_size, input_dim)
dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True)# 模型初始化
model = MILModel(input_dim, bag_size)
criterion = nn.BCELoss() # 二分类交叉熵损失
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练循环
for epoch in range(epochs):model.train()running_loss = 0.0for data, labels in dataloader:optimizer.zero_grad()# 模型输出outputs = model(data)# 计算损失loss = criterion(outputs.squeeze(), labels.float())loss.backward()# 更新模型参数optimizer.step()running_loss += loss.item()print(f"Epoch [{epoch+1}/{epochs}], Loss: {running_loss/len(dataloader):.4f}")# 测试模型
model.eval()
with torch.no_grad():test_data, test_labels = dataset[0] # 测试第一个袋test_data = test_data.unsqueeze(0) # 添加batch维度output = model(test_data)print(f"Predicted label: {output.item()}, True label: {test_labels.item()}")
7. 总结
- 多实例学习(MIL)是一种非常适合处理标签不明确的机器学习方法,广泛应用于图像处理、医学分析、遥感数据等领域。
- 通过对实例集的整体分类推断,MIL 可以有效减少标注数据的不准确性和噪声,提升模型的稳定性和性能。
- 在深度学习的支持下,MIL 已逐渐被应用到更复杂的任务,如滑坡检测、肿瘤识别等。
第四届计算机、人工智能与控制工程国际学术会议 (CAICE 2025)
- The 4th International Conference on Computer, Artificial Intelligence and Control Engineering
- 大会官网:www.ic-caice.net
- 大会时间:2025年1月10-12日
- 大会地点:中国·合肥 (安徽大学磬苑宾馆)
- 接受/拒稿通知:投稿后5-7个工作日左右
- 收录检索:EI,Scopus两大数据库稳定双检索!
2025年计算生物学与系统生物学学术研讨会(CBSB 2025)
- 2025 Symposium on Computational Biology and Systems Biology
- 会议时间:2025年1月10-12日
- 会议地点:中国 · 沈阳
- 会议官网:www.ic-bic.net
- EI、SCOPUS双检索