Python Day44

Task:
1.預訓練的概念
2.常見的分類預訓練模型
3.圖像預訓練模型的發展史
4.預訓練的策略
5.預訓練代碼實戰:resnet18


1. 預訓練的概念

預訓練(Pre-training)是指在大規模數據集上,先訓練模型以學習通用的特征表示,然后將其用于特定任務的微調。這種方法可以顯著提高模型在目標任務上的性能,減少訓練時間和所需數據量。

核心思想:

  • 在大規模、通用的數據(如ImageNet)上訓練模型,學習豐富的特征表示。
  • 將預訓練模型應用于任務特定的細調(fine-tuning),使模型適應目標任務。

優勢:

  • 提升模型性能
  • 縮短訓練時間
  • 需要較少的標注數據
  • 提供良好的特征初始化

2. 常見的分類預訓練模型

常見的分類預訓練模型主要包括:

模型名稱提出年份特色與應用
AlexNet2012標志深度學習重返計算機視覺的起點
VGG(VGG16/19)2014簡潔結構,深層網絡,廣泛用于特征提取
ResNet(Residual Network)2015引入殘差連接,解決深層網絡退化問題
Inception(GoogLeNet)2014多尺度特征提取,復雜模塊設計
DenseNet2017密集連接,加深網絡而不增加參數
MobileNet2017輕量級模型,適合移動端應用
EfficientNet2019根據模型寬度、深度和分辨率優化設計

這些模型在ImageNet等大規模數據集上預訓練,成為計算機視覺各種任務的基礎。


3. 圖像預訓練模型的發展史

  1. AlexNet (2012)
    首次使用深度卷積神經網絡大規模應用于ImageNet,顯著提升分類效果。

  2. VGG系列 (2014)
    簡單堆疊卷積和池化層,深度逐步增加,提高表現。

  3. GoogLeNet/Inception (2014)
    引入Inception模塊,進行多尺度特征提取,有效提升效率。

  4. ResNet (2015)
    通過殘差連接解決深層網絡的退化問題,使網絡深度大幅提升(如ResNet-50,ResNet-101等)。

  5. DenseNet (2017)
    特色是密集連接,增強特征傳播,改善梯度流。

  6. MobileNet, EfficientNet (2017-2019)
    追求輕量級和高效率,適應移動端和資源有限場景。

總的趨勢:

  • 從淺層逐步向深層網絡發展
  • 引入殘差、密集連接等結構解決深層網絡訓練難題
  • 注重模型效率與性能平衡

4. 預訓練的策略

常用的預訓練策略包括:

1. 直接使用預訓練模型進行微調(Fine-tuning)

  • 加載預訓練權重
  • 替換最后的分類層以適應新任務(如類別數不同)
  • 選擇性凍結部分層(如只訓練最后幾層)或全部訓練

2. 特征提取(Feature Extraction)

  • 使用預訓練模型的固定特征提取器,從中提取特征
  • 在這些特征基礎上訓練簡單的分類器(如SVM或線性層)

3. 逐層逐步微調(Layer-wise Fine-tuning)

  • 先凍結底層特征層,只訓練高層
  • 再逐步解凍低層,進行全層微調

4. 遷移學習(Transfer Learning)

  • 利用預訓練模型遷移到相似領域任務中
  • 通過微調適應不同數據分布和任務需求

5. 預訓練代碼實戰:ResNet18

以下是基于PyTorch框架的ResNet18預訓練模型加載和微調的示例代碼:

import torch
import torch.nn as nn
import torchvision.models as models
import torchvision.transforms as transforms
from torchvision.datasets import ImageFolder
from torch.utils.data import DataLoader# 1. 加載預訓練ResNet18模型
model = models.resnet18(pretrained=True)# 2. 替換分類層以適應新任務(比如有10個類別)
num_classes = 10
model.fc = nn.Linear(model.fc.in_features, num_classes)# 3. 凍結前面層,只訓練最后的全連接層(可選)
for param in model.parameters():param.requires_grad = False  # 凍結所有參數# 只訓練最后一層參數
for param in model.fc.parameters():param.requires_grad = True# 4. 定義數據變換
transform = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225]),
])# 5. 加載數據集
train_dataset = ImageFolder('path_to_train_data', transform=transform)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)val_dataset = ImageFolder('path_to_val_data', transform=transform)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False)# 6. 設置優化器(只優化可訓練參數)
optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, model.parameters()), lr=1e-3)
criterion = nn.CrossEntropyLoss()# 7. 訓練環節
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = model.to(device)for epoch in range(10):model.train()total_loss = 0for images, labels in train_loader:images = images.to(device)labels = labels.to(device)optimizer.zero_grad()outputs = model(images)loss = criterion(outputs, labels)loss.backward()optimizer.step()total_loss += loss.item()print(f"Epoch {epoch+1}, Loss: {total_loss/len(train_loader):.4f}")# 8. 評估
model.eval()
correct = 0
total = 0
with torch.no_grad():for images, labels in val_loader:images = images.to(device)labels = labels.to(device)outputs = model(images)_, predicted = torch.max(outputs, 1)correct += (predicted == labels).sum().item()total += labels.size(0)
print(f'Validation Accuracy: {100 * correct / total:.2f}%')

總結

  • 預訓練是一種利用大規模數據學習通用特征,從而在目標任務中快速獲得優秀表現的技術。
  • 常用的分類預訓練模型包括ResNet、VGG、Inception等,發展經歷了從淺層到深層、從視覺到效率的不斷演變。
  • 預訓練策略多樣,適應不同場景,微調與特征提取是常用手段。
  • 實戰中,可以利用PyTorch提供的模型接口快速加載預訓練模型,并進行微調以滿足具體需求。

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

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

相關文章

vue3 eslint ts 關閉多單詞命名檢查

無效做法 import { globalIgnores } from eslint/config import {defineConfigWithVueTs,vueTsConfigs, } from vue/eslint-config-typescript import pluginVue from eslint-plugin-vue import skipFormatting from vue/eslint-config-prettier/skip-formatting// To allow m…

貪心,回溯,動態規劃

1.貪心算法 ? 貪心算法是一種在每一步選擇中都采取在當前狀態下最好或最優的選擇,從而希望全局最好或是最優的算法。 特點 局部最優選擇不能保證全局最優高效 適用條件 局部最優可以導致全局最優問題的最優解包含子問題的最優解 經典問題 活動選擇問題最短路徑最…

【Netty4核心原理⑧】【揭開Bootstrap的神秘面紗 - 服務端Bootstrap?】

文章目錄 一、前言二、流程分析1. 創建 EventLoopGroup2. 指定 Channel 類型2.1 Channel 的創建2.2 Channel 的初始化 3. 配置自定義的業務處理器 Handler3.1 ServerBootstrap#childHandler3.2 handler 與 childHandler 的區別 4. 綁定端口服務啟動 三、bossGroup 與 workerGro…

為什么需要自動下載瀏覽器驅動?

為什么需要自動下載瀏覽器驅動? 血淚場景重現 新人入職第一天: 花3小時配置Chrome/Firefox驅動版本不匹配導致SessionNotCreatedException 瀏覽器自動更新后: 所有測試腳本突然崩潰手動查找驅動耗時長 終極解決方案:自動下載驅…

NLP常用工具包

?做一次按NLP項目常見工具的使用拆解 1. tokenizer from torchtext.data.utils import get_tokenizertokenizer get_tokenizer(basic_english) text_sample "Were going on an adventure! The weather is really nice today." tokens tokenizer(text_sample) p…

在 Vue 的template中使用 Pug 的完整教程

在 Vue 的template中使用 Pug 的完整教程 引言 什么是 Pug? Pug(原名 Jade)是一種高效的網頁模板引擎,通過縮進式語法和簡潔的寫法減少 HTML 的冗長代碼。Pug 省略了尖括號和閉合標簽,使用縮進定義結構,…

【Android基礎回顧】四:ServiceManager

Android 中的 ServerManager 是 Android 框架中一個用于管理系統服務的核心機制。它是 Binder IPC 的一部分,用于在客戶端和服務端之間建立聯系,廣泛應用于系統服務(如 ActivityManager、WindowManager 等)的注冊與獲取。 1 Serv…

【Android基礎回顧】一:Binder機制是什么?有什么用?

Android中的Binder機制是Android系統中最核心和最基礎的進程間通訊機制。 1 什么是進程間通訊機制(IPC)? 眾所周知,Android系統基于Linux開發,Linux系統里面本來就有進程間通訊機制。 1.1 Linux的IPC(Inter-Process Communication)概覽 它…

Go語言爬蟲系列教程5:HTML解析技術以及第三方庫選擇

Go語言爬蟲系列教程5:HTML解析技術以及第三方庫選擇 在上一章中,我們使用正則表達式提取網頁內容,但這種方法有局限性。對于復雜的HTML結構,我們需要使用專門的HTML解析庫。在這一章中,我們將介紹HTML解析技術以及如何…

AtCoder 第408?場初級競賽 A~E題解

A Timeout 【題目鏈接】 原題鏈接:A - Timeout 【考點】 模擬 【題目大意】 長老會在 s 秒后睡去,進過 n 次叫醒,長老最后能否是保持清醒。 【解析】 模擬每一次拍擊叫醒的過程,查看本次時間距上次時間是否大于 s。注意:第一次拍擊叫醒應和 0 秒相減。 【難度】 …

Unity VR/MR開發-VR設備與適用場景分析

視頻講解鏈接:【XR馬斯維】VR/MR設備與適用場景分析?【UnityVR/MR開發教程--入門】_游戲熱門視頻

MyBatis 查詢功能實現全流程

一、創建maven項目 配置好相應的jdk 二、在數據庫建立相應的表格 1.因為Mybatis實際是對sql表的一系列操作,所以我們新建一個數據庫 2.在查詢界面運行下面指令創建一個user表 CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(32) NOT NU…

tcp/udp

tcp/udp協議概述 傳輸層協議基本概念 傳輸層協議建立在網絡層和會話層之間,為應用層實體提供端到端的通信功能,確保數據包的順序傳送及數據的完整性。它利用網絡層提供的服務,并通過傳輸層地址(端口號)提供給高層用戶…

k8s集群安裝坑點匯總

前言 由于使用最新的Rocky9.5,導致kubekey一鍵安裝用不了,退回Rocky8麻煩機器都建好了,決定手動安裝k8s,結果手動安裝過程中遇到各種坑,這里記錄下; k8s安裝 k8s具體安裝過程可自行搜索,或者deepseek; 也…

深入解析 Dotnet-Boxed.Framework:提升 .NET 開發效率的利器

在現代 .NET 開發中,框架和工具的選擇對項目的開發效率和長期維護至關重要。Dotnet-Boxed.Framework 是一個開源框架,旨在簡化開發流程,提高生產力。它通過一組實用的工具和自動化功能,幫助開發者快速構建高質量的應用程序。本文將…

如何輕松地將文件從 PC 傳輸到 iPhone?

傳統上,您可以使用 iTunes 將文件從 PC 傳輸到 iPhone,但現在,使用 iTunes 已不再是唯一的選擇。現在有多種不同且有效的方法可以幫助您傳輸文件。在今天的指南中,您可以找到 8 種使用或不使用 iTunes 傳輸文件的方法,…

Kafka深度解析與原理剖析

文章目錄 一、Kafka核心架構原理1. **分布式協調與選舉**2. **ISR、OSR與HW機制**3. **高性能存儲設計**4. **刷盤機制 (Flush)**5. **消息壓縮算法**二、高可用與消息可靠性保障1. **數據高可用策略**2. **消息丟失場景與規避**3. **順序消費保證**三、Kafka高頻面試題精析1. …

【教學類】20250605立體紙盤(3邊形-22邊形,角度5、10……40,45)

背景需求 在《自助餐》活動中, 【教學類-53-01】20240918自助餐餐盤-CSDN博客文章瀏覽閱讀984次,點贊29次,收藏11次。【教學類-53-01】20240918自助餐餐盤https://blog.csdn.net/reasonsummer/article/details/142340542?spm1011.2415.300…

GC1809:高性能24bit/192kHz音頻接收芯片解析

1. 芯片概述 GC1809 是數字音頻接收芯片,支持IEC60958、S/PDIF、AES3等協議,集成8選1輸入切換、低抖動時鐘恢復和24bit DAC,適用于家庭影院、汽車音響等高保真場景。 核心特性 高精度:24bit分辨率,動態范圍105dB&…

Next.js 中間件鑒權繞過漏洞 CVE-2025-29927

前言:CVE-2025-29927 是一個影響 Next.js 的嚴重漏洞&#xff0c;源于開發者信任了客戶端請求中攜帶的 X-Middleware-Rewrite 頭部字段。攻擊者可以手動構造該頭部&#xff0c;實現繞過中間件邏輯&#xff0c;訪問本應受保護的資源或 API。 影響版本&#xff1a;Next.js < …