transformers 筆記:自定義模型(配置+模型+注冊為AutoCLass+本地保存加載)

  • Transformers 模型設計上是可定制的。
  • 每個模型的代碼都包含在 Transformers 倉庫的 model 子文件夾中(transformers/src/transformers/models at main · huggingface/transformers),每個模型文件夾通常包含:
    • modeling.py:定義模型結構與前向傳播
    • configuration.py:定義模型的超參數配置

1?配置(Configuration)

1.1 自定義配置

  • 自定義配置類的要點:
    • 必須繼承自 PretrainedConfig,以繼承 from_pretrained()save_pretrained() 等功能;
    • 構造函數 __init__() 必須接收任意 **kwargs 并傳給父類;
    • 添加 model_type 屬性,以支持 AutoClass;
    • 可以加入參數校驗邏輯。

1.2 保存配置

resnet50d_config = ResnetConfig(block_type="bottleneck", stem_width=32, stem_type="deep", avg_down=True)
resnet50d_config.save_pretrained("custom-resnet")

2?模型結構

  • 模型類需要繼承自 PreTrainedModel,并接受配置對象作為輸入
  • Transformers 約定模型的所有超參數由配置對象提供
  • 可以構建兩種模型:

2.1?裸模型(輸出隱藏狀態)

2.2?帶分類頭的模型(支持 Trainer,輸出 logits 和 loss)

2.3?加載預訓練權重

import timmresnet50d = ResnetModel(resnet50d_config)
#此時 resnet50d.model 就是一個結構為 ResNet-50d 的模型,但權重是 隨機初始化的,沒有訓練。pretrained_model = timm.create_model("resnet50d", pretrained=True)
#從 timm 加載已經訓練好的 resnet50d 模型resnet50d.model.load_state_dict(pretrained_model.state_dict())

3 啟用 AutoClass 支持

AutoClass API 能自動根據配置加載模型,簡化用戶調用

需要:

  1. 在配置類中加入 model_type

  2. 在模型類中加入 config_class

  3. 使用 AutoConfig.register()AutoModel.register() 注冊。

from transformers import AutoConfig, AutoModel, AutoModelForImageClassificationAutoConfig.register("resnet", ResnetConfig)
#注冊自定義配置類 ResnetConfig。
#"resnet" 是 ResnetConfig.model_type,它必須和配置類中的 model_type = "resnet" 一致。
#注冊后,用戶可以通過 AutoConfig.from_pretrained() 自動加載這個配置類。AutoModel.register(ResnetConfig, ResnetModel)
#把裸模型類 ResnetModel 綁定到 AutoModel。
'''
這樣用戶就可以用如下方式加載模型:
model = AutoModel.from_pretrained("your-username/custom-resnet50d", trust_remote_code=True)
'''AutoModelForImageClassification.register(ResnetConfig, ResnetModelForImageClassification)
#注冊了你帶分類頭的模型 ResnetModelForImageClassification 到 AutoModelForImageClassification。
'''
用戶可以像這樣加載:
model = AutoModelForImageClassification.from_pretrained("your-username/custom-resnet50d", trust_remote_code=True
)
'''

4 本地保存& 加載特定模型

?假設已經定義和注冊配置和模型,并加載了預訓練權重

resnet50d_config = ResnetConfig(block_type="bottleneck", stem_width=32, stem_type="deep", avg_down=True)
#加載自定義configresnet50d = ResnetModelForImageClassification(resnet50d_config)
#加載自定義model# 加載預訓練權重
import timm
pretrained = timm.create_model("resnet50d", pretrained=True)
resnet50d.model.load_state_dict(pretrained.state_dict())

注冊 AutoClass 支持,保存 AutoClass 映射信息

resnet50d_config.register_for_auto_class()
resnet50d.register_for_auto_class("AutoModelForImageClassification")


保存模型和配置到本地

resnet50d.save_pretrained("custom-resnet50d/")
resnet50d_config.save_pretrained("custom-resnet50d/")

4.1 本地重新加載

from transformers import AutoModelForImageClassification# 加載模型
model = AutoModelForImageClassification.from_pretrained("custom-resnet50d/", trust_remote_code=True
)

由于使用的是自定義模型類,加載時一定要加上trust_remote_code=True

4.2 保存后的本地目錄

4.3 為什么要保存config?

  • config 是必須保存的,因為 AutoModel 是依賴 config.json 來決定加載哪個模型類。
  • AutoModel.from_pretrained("path_or_repo")背后的機制是
    • 先加載配置文件 config.json
      • config = AutoConfig.from_pretrained("path_or_repo")
    • 根據 config.model_type 決定使用哪個模型類
      • "model_type": "resnet" → 查找注冊的 ResnetModel
    • 再加載權重文件(.bin 或 .safetensors)到模型中

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88109.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88109.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88109.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java工具類,對象List提取某個屬性為List,對象List轉為對象Map其中某個屬性作為Key值

Java工具類package org.common;import lombok.extern.slf4j.Slf4j;import java.util.*; import java.util.stream.Collectors;Slf4j public final class CollectorHelper {/*** param element* param propertyName* param <E>* return*/public static <E> List toL…

ATE FT ChangeKit學習總結-20250630

目錄 一、基本概念 二、主要特點 三、BOM LIST Shuttle Hot Plate Dock Plate Contactor 四、設計要點 五、參考文獻與鏈接 一、基本概念 Change Kit在半導體封裝測試領域中是一個重要的組件,它作為Handler(自動化分類機)的配套治具,在芯片測試過程中發揮著關鍵作…

【網絡協議安全】任務14:路由器DHCP_AAA_TELNET配置

本文檔將詳細介紹在華為 eNSP 仿真環境中&#xff0c;實現路由器 DHCP 服務器功能、AAA 認證以及 TELNET 遠程登錄配置的完整步驟&#xff0c;適用于華為 VRP 系統路由器。 一、配置目標 路由器作為 DHCP 服務器&#xff0c;為局域網內的設備自動分配 IP 地址、子網掩碼、網關…

深度探索:現代翻譯技術的核心算法與實踐(第一篇)

引言:翻譯技術的演進之路 從早期的基于規則的機器翻譯(RBMT)到統計機器翻譯(SMT),再到如今主導行業的神經機器翻譯(NMT),翻譯技術已經走過了漫長的發展道路。現代翻譯系統不僅能夠處理簡單的句子,還能理解上下文、識別領域術語,甚至捕捉微妙的文化差異。 本系列文章將帶…

玩轉Docker | 使用Docker部署NotepadMX筆記應用程序

玩轉Docker | 使用Docker部署NotepadMX筆記應用程序 前言一、NotepadMX介紹工具簡介主要特點二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署NotepadMX服務下載NotepadMX鏡像編輯部署文件創建容器檢查容器狀態檢查服務端口安全設置四、訪問NotepadMX服務訪…

Web前端:not(否定偽類選擇器)

not&#xff08;否定偽類選擇器&#xff09;CSS中的 :not() 選擇器是?個否定偽類選擇器&#xff0c;它?于選擇不符合給定選擇器的元素。這是?種排除特定元素的?法&#xff0c;可以?來簡 化復雜的選擇器&#xff0c;提? CSS 規則的靈活性和精確性。:not() 選擇器的基本語法…

【BTC】比特幣網絡

目錄 一、比特幣網絡架構 1.1 節點加入與離開 二、消息傳播方式 三、交易處理機制 四、網絡傳播問題 五、實際應用問題及解決 本章節講比特幣網絡的工作原理&#xff0c;講解新創建的區塊是如何在比特幣網絡中傳播的。 一、比特幣網絡架構 比特幣工作在應用層&#xff…

Clickhouse 的歷史發展過程

20.5.3 開始支持多線程20.6.3 支持explainmysql 20.8 實時同步mysql&#x1f4cc; ?一、早期版本階段&#xff08;1.1.x系列&#xff09;??版本范圍?&#xff1a;1.1.54245&#xff08;2017-07&#xff09;→ 1.1.54394&#xff08;2018-07&#xff09;?核心特性?&#x…

玩轉n8n工作流教程(一):Windows系統本地部署n8n自動化工作流(n8n中文漢化)

在Windows系統下使用 Docker 本地部署N8N中文版的具體操作&#xff0c;進行了詳盡闡述&#xff0c;玩轉n8n工作流教程系列內容旨在手把手助力從0開始一步一步深入學習n8n工作流。想研究n8n工作流自動化的小伙伴們可以加個關注一起學起來。后續也會持續分享n8n自動化工作流各種玩…

mini-program01の系統認識微信小程序開發

一、官方下載并安裝 1、下載&#xff08;I選了穩定版&#xff09; https://developers.weixin.qq.com/miniprogram/dev/devtools/download.htmlhttps://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 2、安裝&#xff08;A FEW MOMENT LATER&#xff09;…

如何將 Java 項目打包為可執行 JAR 文件

如何將 Java 項目打包為可執行 JAR 文件我將詳細介紹將 Java 項目打包為可執行 JAR 文件的完整流程&#xff0c;包括使用 IDE 和命令行兩種方法。方法一&#xff1a;使用 IntelliJ IDEA 打包步驟 1&#xff1a;配置項目結構打開項目點擊 File > Project Structure在 Project…

【Starrocks 異常解決】-- mysql flink sync to starrocks row error

1、異常信息 flink 1.20 starrocks 3.3.0 mysql 8.0 errorLog: Error: Target column count: 35 doesnt match source value column count: 28. Column separator: \t, Row delimiter: \n. Row: 2025-05-22 6 23400055 214 dssd 1 1 1928 mm2er 360 20000.00000000 1…

Jenkins 使用宿主機的Docker

背景&#xff1a;不想在Jenkins 內部安裝Docker,想直接使用Jenkins服務所在的系統安裝的docker當你在 Jenkins 中執行 docker 命令時&#xff0c;實際上是通過 Docker 客戶端與 Docker 守護進程進行通信。Docker 客戶端和守護進程之間的通信是通過一個名為 /var/run/docker.soc…

工具+服務雙驅動:創客匠人打造中醫IP差異化競爭力

一、技術工具場景化定制&#xff1a;中醫專業的可視化破圈在中醫IP同質化嚴重的行業現狀下&#xff0c;創客匠人以場景化技術工具破解專業傳播難題。系統內置的“體質測試”模塊可生成個性化調理報告&#xff0c;“案例庫”支持前后對比圖上傳&#xff0c;“直播問診”自動添加…

JVM對象分配內存如何保證線程安全?

大家好&#xff0c;我是鋒哥。今天分享關于【JVM對象分配內存如何保證線程安全&#xff1f;】面試題。希望對大家有幫助&#xff1b; JVM對象分配內存如何保證線程安全&#xff1f; 超硬核AI學習資料&#xff0c;現在永久免費了&#xff01; 在Java中&#xff0c;JVM&#xf…

機器學習中的數據對齊

文章目錄前言數據集怎么理解數據數據對齊為什么偏偏是這樣對齊&#xff1f;前言 在神經網絡中&#xff0c;我們往往會根據數據集構建訓練集、測試集&#xff0c;有時會有驗證集。但是&#xff0c;在構建完成后&#xff0c;如果直接將這些數據直接扔進模型訓練&#xff0c;輸入…

機器學習:更多分類回歸算法之決策樹、SVM、KNN

下面介紹的這幾種算法&#xff0c;既能用于回歸問題又能用于分類問題&#xff0c;接下來了解下吧。 決策樹 可參考&#xff1a; 決策樹&#xff08;Decision Tree&#xff09; | 菜鳥教程 決策樹&#xff08;Decision Tree&#xff09;是一種常用的監督學習算法&#xff0c;可用…

Vue 整合 Vue Flow:從零構建交互式流程圖

目錄引言目的適用場景環境準備基礎組件 (index.vue)自定義組件 (矩形、菱形等)RectangleNode.vue (矩形節點)&#xff1a;DiamondNode.vue (菱形節點)&#xff1a;ImageNode(自定義圖片節點):操作實現 (#操作實現) 拖拽節點 (#拖拽節點) 連線 (多連接點) 刪除節點 …

C# WPF - Prism 學習篇:搭建項目(一)

一、前期準備開發工具&#xff1a;Visual Studio 2022二、創建項目1、創建WPF 應用“WpfApp.StudyDemo”&#xff1a;2、項目結構如下&#xff1a; 三、安裝 Prism1、選中項目“WpfApp.PrismDemo”&#xff0c;在右鍵菜單中選擇“管理 NuGet 程序包(N)...”。2、在搜索框中輸入…

單片機 基于rt-thread 系統 使用 CCM內存

一、開發環境 開發板&#xff1a;野火stm32f407 系統&#xff1a;rt-thread V4.1.1 二、鏈接腳本配置 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ****************************…