MobileNet V1的Pytorch實現并加載預訓練模型進行驗證

一. 環境

  1. windonws 11
  2. RTX5060
  3. CUDA 12.8
  4. Pytorch 2.9.0dev20250630+cu128
  5. torchvision 0.23.0dev20250701+cu128

二. 代碼

基于Mobilenet-CustomData 的Mobilenet_Pretrain.ipynb

1. 定義Mobile Net V1

import os
import time
import torch
import torch.nn as nn
import torchvision.transforms as transforms
import torchvision.datasets as datasetsfrom utils_pretrain import *# Define your data path here
IMAGENET_PATH = r'E:\AI\tiny-imagenet-200\tiny-imagenet-200'class Net(nn.Module):def __init__(self):super(Net, self).__init__()def conv_bn(inp, oup, stride):return nn.Sequential(nn.Conv2d(inp, oup, 3, stride, 1, bias=False),nn.BatchNorm2d(oup),nn.ReLU(inplace=True))def conv_dw(inp, oup, stride):return nn.Sequential(nn.Conv2d(inp, inp, 3, stride, 1, groups=inp, bias=False),nn.BatchNorm2d(inp),nn.ReLU(inplace=True),nn.Conv2d(inp, oup, 1, 1, 0, bias=False),nn.BatchNorm2d(oup),nn.ReLU(inplace=True),)self.model = nn.Sequential(conv_bn(  3,  32, 2), conv_dw( 32,  64, 1),conv_dw( 64, 128, 2),conv_dw(128, 128, 1),conv_dw(128, 256, 2),conv_dw(256, 256, 1),conv_dw(256, 512, 2),conv_dw(512, 512, 1),conv_dw(512, 512, 1),conv_dw(512, 512, 1),conv_dw(512, 512, 1),conv_dw(512, 512, 1),conv_dw(512, 1024, 2),conv_dw(1024, 1024, 1),nn.AvgPool2d(7),)self.fc = nn.Linear(1024, 1000)def forward(self, x):x = self.model(x)x = x.view(-1, 1024)x = self.fc(x)return xmobilenet_model1 = Net()

2. 加載fine_tune模型

mobilenet_model1 = torch.nn.DataParallel(mobilenet_model1).cuda()
params = torch.load('D:\CodeSpace\MobileNet\Mobilenet-CustomData-master\Mobilenet-CustomData-master\Mobiilenet-finetune\moblienet_30e.pth.tar')
mobilenet_model1.load_state_dict(params,strict=False)

3. validate 設置

criterion = nn.CrossEntropyLoss().cuda()
batch_size = 10
workers = 4
epochs = 1
print_freq = 100valdir = os.path.join(IMAGENET_PATH, 'val')
if not os.path.exists(valdir):print(f"val文件夾 {valdir} 不存在,請檢查路徑。")exit(1)normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225])val_loader = torch.utils.data.DataLoader(datasets.ImageFolder(valdir, transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),normalize,])),batch_size=batch_size, shuffle=False,num_workers=workers, pin_memory=True)def validate(val_loader, model, criterion):batch_time = AverageMeter()losses = AverageMeter()top1 = AverageMeter()top5 = AverageMeter()# switch to evaluate modemodel.eval()end = time.time()for i, (input, target) in enumerate(val_loader):# target = target.cuda(async=True) # non_blockingtarget = target.cuda(non_blocking=True)#input_var = torch.autograd.Variable(input, volatile=True)#target_var = torch.autograd.Variable(target, volatile=True)with torch.no_grad():input_var = input.cuda()target_var = target.cuda()# compute outputoutput = model(input_var)loss = criterion(output, target_var)# measure accuracy and record lossprec1, prec5 = accuracy(output.data, target, topk=(1, 5))# .data[0]改成.item()losses.update(loss.item(), input.size(0))top1.update(prec1.item(), input.size(0))top5.update(prec5.item(), input.size(0))# measure elapsed timebatch_time.update(time.time() - end)end = time.time()if i % print_freq == 0:print('Test: [{0}/{1}]\t''Time {batch_time.val:.3f} ({batch_time.avg:.3f})\t''Loss {loss.val:.4f} ({loss.avg:.4f})\t''Prec@1 {top1.val:.3f} ({top1.avg:.3f})\t''Prec@5 {top5.val:.3f} ({top5.avg:.3f})'.format(i, len(val_loader), batch_time=batch_time, loss=losses,top1=top1, top5=top5))print(' * Prec@1 {top1.avg:.3f} Prec@5 {top5.avg:.3f}'.format(top1=top1, top5=top5))return top1.avg

4. validate 和結果

best_prec1 = 0for epoch in range(0, epochs):# evaluate on validation setprec1 = validate(val_loader, mobilenet_model1, criterion)# prec3 = validate(val_loader, mobilenet_model3, criterion)# remember best prec@1 and save checkpointis_best = prec1 > best_prec1best_prec1 = max(prec1, best_prec1)
Test: [0/1000]	Time 10.112 (10.112)	Loss 3.6720 (3.6720)	Prec@1 20.000 (20.000)	Prec@5 90.000 (90.000)
Test: [100/1000]	Time 0.008 (0.109)	Loss 2.5464 (3.8335)	Prec@1 40.000 (4.752)	Prec@5 100.000 (84.851)
Test: [200/1000]	Time 0.009 (0.059)	Loss 4.6422 (3.8443)	Prec@1 0.000 (5.174)	Prec@5 70.000 (83.333)
Test: [300/1000]	Time 0.009 (0.042)	Loss 3.4911 (3.8356)	Prec@1 10.000 (5.316)	Prec@5 80.000 (83.588)
Test: [400/1000]	Time 0.009 (0.034)	Loss 4.4792 (3.8361)	Prec@1 0.000 (5.162)	Prec@5 90.000 (83.691)
Test: [500/1000]	Time 0.009 (0.028)	Loss 3.6648 (3.8577)	Prec@1 0.000 (5.070)	Prec@5 90.000 (83.972)
Test: [600/1000]	Time 0.008 (0.025)	Loss 2.6866 (3.8470)	Prec@1 20.000 (5.158)	Prec@5 90.000 (84.160)
Test: [700/1000]	Time 0.008 (0.023)	Loss 3.4880 (3.8465)	Prec@1 0.000 (5.235)	Prec@5 100.000 (84.379)
Test: [800/1000]	Time 0.008 (0.021)	Loss 4.0429 (3.8602)	Prec@1 0.000 (5.006)	Prec@5 70.000 (84.120)
Test: [900/1000]	Time 0.009 (0.019)	Loss 3.8612 (3.8640)	Prec@1 0.000 (5.006)	Prec@5 60.000 (84.029)* Prec@1 5.060 Prec@5 83.860

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

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

相關文章

HTTP協議利用TCP的特性來實現長連接

在討論網絡協議時,經常會有人提出這樣一個問題:“既然HTTP是基于TCP的,而TCP本身支持長連接,為什么HTTP不支持長連接?”這種說法其實是一種誤解。實際上,HTTP確實可以并且經常使用長連接(也稱為持久連接)。 什么是長連接? 首先,我們需要明確什么是“長連接”。在網…

整流電路Multisim電路仿真實驗匯總——硬件工程師筆記

目錄 1 整流電路基礎 1.1 整流電路基本原理 1.2 整流電路的類型 1.2.1 單相整流電路 1.2.2 三相整流電路 1.3 整流電路的應用 1.3.1 直流電源 1.3.2 電池充電器 1.3.3 變頻調速系統 1.34 電解和電鍍 1.4 整流電路的優缺點 1.4.1 優點 1.4.2 缺點 2 二極管整流電路…

LangChain 全面入門

什么是 LangChain? LangChain 是一個專門為 大語言模型 (LLM) 應用開發設計的開源框架,幫你快速實現: ? 多輪對話 ? 知識庫問答 (RAG) ? 多工具協同調用 (function calling / tool) ? 智能體 Agent 自動決策任務鏈 解耦 LLM 接口、Prom…

RabbitMQ 高級特性之消息確認

1. 簡介 RabbitMQ 的消息發送流程: producer 將消息發送給 broker,consumer 從 broker 中獲取消息并消費 那么在這里就涉及到了兩種消息發送,即 producer 與 broker 之間和 consumer 與 broker 之間。 “消息確認” 討論的是 consumer 與…

【51單片機用數碼管顯示流水燈的種類是按鈕控制數碼管加一和流水燈】2022-6-14

緣由 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64}; //共陰0~F消隱減號 unsigned char Js0, miao0;//中斷計時 秒 分 時 毫秒 sbit k0P3^0; sbit k1P3^1; void smxs(u…

Android15 開機動畫播放結束之后如何直接啟動應用

問題背景 軟件版本:Android15 在一些需求場景里面,需要開機動畫播放結束立馬去啟動一個應用,下面介紹如何實現這種方案。 解決方案 首選我們需要知道開機動畫播放結束之后的流程,這里會調用到wms里面,也就是一些enableScreen之類的函數,知道這個大概流程之后,再去對應…

AI實踐:大模型痛點和解決方案討論

大家好,我是星野,歡迎來到我的CSDN博客。在這個技術日新月異的時代,我們一起學習,共同進步。 今天想和大家分享的是大模型在實際應用中的痛點以及解決方案,特別是RAG(檢索增強生成)技術。 大模…

Web前端工程化

Web前端工程化 前端工程化是指將軟件工程的方法和原則應用到前端開發中,以提高開發效率、保證代碼質量、便于團隊協作和項目維護的一套體系化實踐。以下是前端工程化的主要內容和實踐: 核心組成部分 1. 模塊化開發 JavaScript模塊化:Comm…

Java 原生 HTTP Client

?介紹 Java 原生 HttpClient 是從 Java 11 開始引入的標準庫,用于簡化 HTTP 請求的發送與響應處理。它支持同步和異步請求,并內置對 HTTP/1.1 和 HTTP/2 協議的支持。HttpClient 提供了易用的 API 來設置請求頭、請求體、處理響應以及配置 SSL/TLS 加密…

【C語言刷題】第十天:加量加餐繼續,代碼題訓練,融會貫通IO模式

🔥個人主頁:艾莉絲努力練劍 ?專欄傳送門:《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題 🍉學習方向:C/C方向 ??人生格言:為天地立心,為生民立命,為…

【WEB】Polar靶場 6-10題 詳細筆記

六.jwt 這題我又不會寫 先來了解下jwt **JWT(JSON Web Token)**是一種基于JSON的開放標準(RFC 7519),主要用于在網絡應用環境間傳遞聲明信息。JWT通常用于身份驗證和信息交換,確保在各方之間安全地傳輸信…

高階亞馬遜運營秘籍:關鍵詞矩陣打法深度解析與應用

當競爭對手還在為單個大詞競價廝殺時,頭部賣家已悄然構建了一張覆蓋數千長尾關鍵詞的隱形網絡,精準觸達每一個細分需求,以更低的成本撬動更高的轉化率在亞馬遜流量紅利消退、廣告成本高企的2025年,傳統“爆款關鍵詞”打法已顯疲態…

【問題解決】org.springframework.web.util.NestedServletException Handler dispatch failed;

詳細異常信息: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter at org.springframework.web.servlet.DispatcherServlet.doDispatch(Disp…

【已解決】mac 聚焦搜索設置了edge 的地址欄搜索為google,還是跳轉到百度

問題詳情:在macbook的聚焦搜索中點擊edge搜索的時候,跳轉到了百度,即使已經將地址欄的搜索引擎設置為了goole,但是還是會跳轉到百度。解決方案:1、打開safari瀏覽器。(看清了,是打開Safari&…

MimicMotion 讓你的圖片動起來

MimicMotion 是由騰訊公司推出的一款人工智能人像動態視頻生成框架。可以模仿視頻動作再讓圖片模仿動作姿態,最后生成視頻。 MimicMotion 的核心在于其置信度感知的姿態引導技術,確保視頻幀的高質量和時間上的平滑過渡。 以前咱們也手搭過Animate-X讓圖…

云計算考核 - 分析電子銀行需求采用微服務架構對系統進行設計

二、使用的技術以及分析 微服務(Microservices)是一種架構風格,一個大型復雜軟件應用由一個或多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是松耦合的。每個微服務僅關注于完成一件任務并很好地完成該任務。在…

Ionic 安裝使用教程

一、Ionic 簡介 Ionic 是一個基于 Web 技術(HTML、CSS、JavaScript)的跨平臺移動應用開發框架,結合 Angular、React 或 Vue 可快速構建 iOS 和 Android 應用。Ionic 提供豐富的 UI 組件、命令行工具及原生插件封裝,廣泛用于混合應…

滲透測試 - 簡介

Web滲透測試簡介 Web滲透測試(Penetration Testing)是一種模擬黑客攻擊的安全評估方法,旨在發現Web應用程序中的漏洞,幫助開發者修復問題并提升系統安全性。它涉及主動測試目標系統(如網站或API)的弱點&am…

云原生AI研發體系建設路徑

當AI遇上云原生,就像咖啡遇上牛奶,總能擦出不一樣的火花 ?? 📋 文章目錄 引言:為什么要建設云原生AI研發體系整體架構設計:搭建AI研發的"樂高積木"技術棧選擇:選擇合適的"武器裝備"…

【網絡安全】深入理解 IoC 與 IoA:從“事后識別”到“事前防御”

1. 簡介 在網絡安全領域,IoC(Indicators of Compromise,入侵指標) 和 IoA(Indicators of Attack,攻擊指標) 是兩個核心概念。它們是安全分析師識別攻擊行為、調查事件、制定防御策略的重要依據…