You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SageMaker增量训练:能否修改num_classes超参数以新增类别?

SageMaker图像分类增量训练:新增类别的解决方案

你遇到的这个问题确实是SageMaker内置图像分类算法的一个限制——它的增量训练模式要求num_classes参数必须和原始模型完全一致,因为内置算法的网络输出层维度是固定的,没办法直接在增量训练中新增输出节点来支持新类别。不过不用完全从头训练,有几种可行的方法来实现保留原有模型特征+新增类别的需求:

1. 导出原模型权重,用自定义脚本修改输出层后微调

这是最常用的方案,核心思路是把SageMaker训练好的原模型导出,然后用PyTorch/TensorFlow等框架加载预训练权重,替换最后一层分类头为新的类别数(7类),再冻结前面的特征提取层,只训练新的分类层(或部分上层网络)。

具体步骤:

  • 导出原模型:从SageMaker模型存储位置(S3)下载训练好的模型权重文件(比如内置图像分类算法的模型是.model格式,需要转换成框架兼容的格式,或者直接用框架加载)。
  • 修改网络结构:以PyTorch为例,加载原模型后替换最后全连接层:
    import torch
    from torchvision import models
    
    # 加载原模型(假设原模型是ResNet50,num_classes=4)
    model = models.resnet50()
    # 获取原全连接层的输入特征数
    in_features = model.fc.in_features
    # 替换为新的全连接层,输出7类
    model.fc = torch.nn.Linear(in_features, 7)
    
    # 冻结特征提取层,只训练新的分类层
    for param in model.parameters():
        param.requires_grad = False
    for param in model.fc.parameters():
        param.requires_grad = True
    
  • 用SageMaker自定义容器训练:把修改后的脚本和权重打包,用SageMaker的PyTorch/TensorFlow容器启动训练,只更新新的分类层权重,这样既保留了原模型的特征提取能力,又能快速适配新类别。

2. 利用SageMaker迁移学习工具链

如果不想自己写太多自定义代码,可以用SageMaker的Hugging Face容器或者内置的迁移学习工具,直接基于原模型的特征提取部分,重新训练一个新的分类头。这种方式同样不需要从头训练整个模型,只针对新增的类别和原有类别的补充数据训练上层。

关于你提到的官方Notebook

你参考的那个增量训练Notebook用的是SageMaker内置图像分类算法,它的增量训练逻辑是固定的:仅更新现有类别的权重,不允许修改网络结构(包括num_classes)。所以如果用这个内置算法,确实没办法新增类别,只能保持原有类别数做数据补充。

总结一下:如果要新增类别,不能用内置算法的增量训练模式,必须通过自定义脚本修改模型输出层,基于原模型的预训练权重做微调,这样既不用从头训练,又能实现新增类别的需求。

内容的提问来源于stack exchange,提问作者Patrick Walsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:17:33