Ensemble PyTorch: 通用深度学习集成学习框架

·
·
·

Ensemble PyTorch 是什么

集成学习通过组合多个模型来帮助提高机器学习结果。与单一模型相比,这种方法可以产生更好的预测性能。基本思想是学习一组分类器(专家)并让他们投票。
图片

Ensemble PyTorch 是 PyTorch实现的集成学习框架,可轻松提高深度学习模型的性能和稳健性。它具有以下的优点:

  1. 提高深度学习模型性能和稳健性的简单方法。
  2. 用于训练和评估集成的易于使用的 API。
  3. 并行化训练效率高。

Ensemble PyTorch 支持的算法

Ensemble-PyTorch中支持下面几种集成方法:

  • Fusion(融合):使用所有基估计器的平均输出作为最终输出。
  • 投票和Bagging:独立训练多个基估计器,并将它们的预测结果进行平均。Bagging在每个数据批次上使用有放回抽样。
  • Gradient Boosting(梯度提升):顺序训练基估计器,每个基估计器的学习目标与之前拟合的基估计器的输出相关。基于负梯度更新基估计器的参数。
  • Snapshot Ensemble(快照集成):通过将单个基估计器收敛到不同的局部最小值多次生成集成。使用循环退火调度训练基估计器,将快照的预测结果进行平均。
  • Adversarial Training(对抗训练):使用对抗样本来改进基估计器的性能。每个基估计器独立训练,并使用快速梯度符号方法生成对抗样本。基于原始样本和对抗样本的训练损失来优化基估计器的参数。
  • Fast Geometric Ensemble(快速几何集成):使用自定义的学习率调度程序生成基估计器,类似于快照集成。该方法受到深度神经网络损失曲面的几何洞察的启发。

Ensemble PyTorch安装使用

使用pip进行安装


nbsp;pip install torchensemble

使用Mnist数据集进行分类集成模型训练

import torch
import torch.nn as nn
from torch.nn import functional as F
from torchvision import datasets, transforms

from torchensemble import VotingClassifier
from torchensemble.utils.logging import set_logger

# Define Your Base Estimator
class MLP(nn.Module):

    def __init__(self):
        super(MLP, self).__init__()
        self.linear1 = nn.Linear(784128)
        self.linear2 = nn.Linear(128128)
        self.linear3 = nn.Linear(12810)

    def forward(self, data):
        data = data.view(data.size(0), -1)
        output = F.relu(self.linear1(data))
        output = F.relu(self.linear2(output))
        output = self.linear3(output)
        return output

# Load MNIST dataset
transform=transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
    ])

train = datasets.MNIST('../Dataset', train=True, download=True, transform=transform)
test = datasets.MNIST('../Dataset', train=False, transform=transform)
train_loader = torch.utils.data.DataLoader(train, batch_size=128, shuffle=True)
test_loader = torch.utils.data.DataLoader(test, batch_size=128, shuffle=True)

# Set the Logger
logger = set_logger('classification_mnist_mlp')

# Define the ensemble
model = VotingClassifier(
    estimator=MLP,
    n_estimators=10,
    cuda=True,
)

# Set the criterion
criterion = nn.CrossEntropyLoss()
model.set_criterion(criterion)

# Set the optimizer
model.set_optimizer('Adam', lr=1e-3, weight_decay=5e-4)

# Train and Evaluate
model.fit(
    train_loader,
    epochs=50,
    test_loader=test_loader,
)

实验结果

如下图,在MNIST数据集上,单个LeNet-5估计器的测试准确率超过99%。在这种情况下,投票和Bagging是最有效的集成方法。Bagging比投票更好,因为它通过对训练数据进行自助采样来增加集成的多样性。然而,融合方法在这种情况下表现不佳,可能是因为单个LeNet-5估计器的模型复杂度已经足够应对MNIST数据集,简单地将它们封装到一个大模型中只会加剧过拟合问题。因此,对于MNIST数据集,更好的选择是使用Bagging或投票来提高性能和鲁棒性。
图片

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/111110
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 16分钟前
下一篇 12分钟前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注