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

自定义ViT模型推至Hugging Face Hub时遇JSON序列化错误求助

解决自定义ViT模型推送特征提取器时的JSON序列化错误

问题根源在于你错误地使用ViTConfig实例初始化ViTFeatureExtractor。ViTFeatureExtractor负责图像预处理(如尺寸调整、归一化),需要的是图像预处理参数,而非模型的配置对象,直接传入ViTConfig会导致序列化失败。

修复步骤

  1. 正确初始化特征提取器
    你需要基于模型的输入要求,传入预处理相关参数,比如图像尺寸、归一化的均值和标准差。有两种常用方式:

    • 方式一:从预训练ViT的特征提取器加载配置,再按需修改
      feature_extractor1 = ViTFeatureExtractor.from_pretrained('google/vit-base-patch16-224-in21k')
      # 如果你的模型输入尺寸不同,修改size参数
      # feature_extractor1.size = (256, 256)
      
    • 方式二:手动指定所有预处理参数
      feature_extractor1 = ViTFeatureExtractor(
          size=(224, 224),  # 需与你的ViT模型输入尺寸匹配
          image_mean=[0.485, 0.456, 0.406],  # 常用的ImageNet归一化均值
          image_std=[0.229, 0.224, 0.225]     # 常用的ImageNet归一化标准差
      )
      
  2. 修改后的完整代码片段

    from transformers import ViTConfig, ViTFeatureExtractor, ViTForImageClassification, TrainingArguments, Trainer
    
    config = ViTConfig (
       _name_or_path= "myViT",
      architectures= ["ViTForImageClassification"],
      id2label= {"0": "Benign", "1": "Malignant"},
      # 确保这里设置的image_size和特征提取器的size一致
      image_size=224,
      ...
    )
    
    model1 = ViTForImageClassification(config)
    
    # 正确初始化特征提取器
    feature_extractor1 = ViTFeatureExtractor(size=(224, 224), image_mean=[0.485, 0.456, 0.406], image_std=[0.229, 0.224, 0.225])
    
    training_args1 = TrainingArguments(
        ...
    )
    
    trainer1 = Trainer(
        ...
    )
    
    trainer1.train()
    
    model1.push_to_hub("my-username/my-custom-vit-model")
    feature_extractor1.push_to_hub("my-username/my-custom-vit-model")
    
  3. 关键注意点

    • 特征提取器的size参数必须和ViTConfig中的image_size保持一致,否则模型会因为输入尺寸不匹配报错。
    • 如果你没有特殊需求,建议直接复用预训练ViT的特征提取器配置,这样能保证预处理逻辑和主流ViT模型一致,避免后续微调时出现兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:07:21