python打卡day44@浙大疏錦行

知識點回顧:

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

作業:

  1. 嘗試在cifar10對比如下其他的預訓練模型,觀察差異,盡可能和他人選擇的不同
  2. 嘗試通過ctrl進入resnet的內部,觀察殘差究竟是什么?

一、在 CIFAR10 上對比如下其他的預訓練模型

可以選擇不同的預訓練模型,如 VGG16、Inception V3 等,對比它們在 CIFAR10 數據集上的訓練時間、準確率等指標。以下是使用 VGG16 的示例代碼:

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
from torchvision.models import vgg16# 數據預處理
transform = transforms.Compose([transforms.Resize((224, 224)),  # Inception 和 VGG 要求輸入圖像大小為 224x224transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])# 加載 CIFAR10 數據集
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,shuffle=True, num_workers=2)testset = torchvision.datasets.CIFAR10(root='./data', train=False,download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,shuffle=False, num_workers=2)# 加載預訓練的 VGG16 模型
model = vgg16(pretrained=True)
num_ftrs = model.classifier[6].in_features
model.classifier[6] = nn.Linear(num_ftrs, 10)  # 修改最后一層全連接層以適應 CIFAR10 的 10 個類別# 定義損失函數和優化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)# 訓練模型
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.to(device)for epoch in range(2):  # 訓練 2 個 epochrunning_loss = 0.0for i, data in enumerate(trainloader, 0):inputs, labels = data[0].to(device), data[1].to(device)optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()if i % 2000 == 1999:    # 每 2000 個 mini-batches 打印一次print(f'[{epoch + 1}, {i + 1:5d}] loss: {running_loss / 2000:.3f}')running_loss = 0.0print('Finished Training')

?二、嘗試通過 ctrl 進入 ResNet 的內部,觀察殘差究竟是什么

在 PyTorch 中,如果你使用的是 PyCharm 等 IDE,可以按住 Ctrl 鍵并點擊 resnet18 函數,進入 torchvision.models.resnet 模塊。在該模塊中,可以找到 BasicBlock 類,它實現了 ResNet 的殘差塊。

class BasicBlock(nn.Module):expansion = 1def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1,base_width=64, dilation=1, norm_layer=None):super(BasicBlock, self).__init__()if norm_layer is None:norm_layer = nn.BatchNorm2dif groups != 1 or base_width != 64:raise ValueError('BasicBlock only supports groups=1 and base_width=64')if dilation > 1:raise NotImplementedError("Dilation > 1 not supported in BasicBlock")# Both self.conv1 and self.downsample layers downsample the input when stride != 1self.conv1 = conv3x3(inplanes, planes, stride)self.bn1 = norm_layer(planes)self.relu = nn.ReLU(inplace=True)self.conv2 = conv3x3(planes, planes)self.bn2 = norm_layer(planes)self.downsample = downsampleself.stride = stridedef forward(self, x):identity = xout = self.conv1(x)out = self.bn1(out)out = self.relu(out)out = self.conv2(out)out = self.bn2(out)if self.downsample is not None:identity = self.downsample(x)out += identity  # 這一行實現了殘差連接out = self.relu(out)return out

在 forward 方法中, out += identity 這一行實現了殘差連接。 identity 是輸入的原始特征圖, out 是經過兩層卷積和批量歸一化處理后的特征圖,將它們相加后再通過 ReLU 激活函數,使得模型可以學習到輸入和輸出之間的殘差信息。

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

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

相關文章

十一(3) 類,加深對拷貝構造函數的理解

class ClassName { public: // 拷貝構造函數:參數是同類型對象的引用(通常為 const 引用) ClassName(const ClassName& other) { // 復制 other 的成員變量到當前對象 } }; 參數要求:必須是同類型對象的引用&#xff0…

網頁后端開發(基礎1--maven)

maven的作用: Maven是一款管理和構建Java項目的工具。 1.依賴管理: 方便快捷的管理項目依賴的資源(jar包) 不用手動下載jar包,只需要中maven中引用,maven會查找本地倉庫。若本地倉庫沒有,會直…

認識電子元器件---高低邊驅動

目錄 一、基本概念 二、關鍵參數對比 三、工作原理 (1)高邊驅動 (2)低邊驅動 四、典型的應用場景 五、如何選擇 一、基本概念 可以理解成:高低邊驅動是MOS/IGBT的一種應用方式 高低邊驅動是電路拓撲概念&#…

JavaScript 標簽加載

目錄 JavaScript 標簽加載script 標簽的 async 和 defer 屬性,分別代表什么,有什么區別1. 普通 script 標簽2. async 屬性3. defer 屬性4. type"module"5. 各種加載方式的對比6. 使用建議 JavaScript 標簽加載 script 標簽的 async 和 defer …

C/CPP 結構體、聯合體、位段內存計算 指南

C/CPP 結構體、聯合體、位段內存計算 指南 在C語言中,結構體、聯合體和位段是對數據的高級抽象,它們可以讓程序員以更易于理解的方式來操作復雜的數據結構。然而,這些結構在內存中的布局可能并不如它們的語法結構那樣直觀,特別是當…

ASR(語音識別)語音/字幕標注 通過via(via_subtitle_annotator)

文章目錄 1 VIA 官網資料2 語音/字幕標注3 鍵盤快捷鍵常規當一個時間片段被選中時圖像或視頻幀中的空間區域 1 VIA 官網資料 VIA官網:https://www.robots.ox.ac.uk/~vgg/software/via/ VIA官網標注示例:https://www.robots.ox.ac.uk/~vgg/software/via/…

mq安裝新版-3.13.7的安裝

一、下載包,上傳到服務器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安裝 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置環境變量,直接就安裝了。 erl…

高通平臺PCIE EP模式log丟失問題

高通平臺PCIE EP模式log丟失問題 1 問題背景2 問題分析2.1 對比USB2.1.1 Logtool優化2.1.2 Device mhi與fs對比2.2 優化方案2.2.1 Diag系統優化2.2.2 Host mhi優化3 最終成果1 問題背景 高通5G模組如SDX55\SDX62\SDX65\SDX72\SDX75等支持pcie ep模式。會通過pcie與host(如MT7…

Python應用輸入輸出函數

大家好!在 Python 編程中,輸入輸出函數是與用戶進行交互的橋梁。通過輸入函數,我們可以獲取用戶的輸入數據;通過輸出函數,我們可以向用戶展示程序的運行結果。對于初學者來說,掌握基本的輸入輸出操作是編程入門的重要一…

如何使用 Ansible 在 Ubuntu 24.04 上安裝和設置 LNMP

在當今世界,自動化是有效管理和部署 Web 應用程序的關鍵。Ansible 是一個強大的自動化工具,它是一款開源軟件配置、配置管理和應用程序部署工具。本文將指導您使用 Ansible 在 Ubuntu 服務器上安裝 LNMP 堆棧(Linux、Nginx、MySQL、PHP)。 先決條件 為了執行本指南中討論的…

Xela矩陣三軸觸覺傳感器的工作原理解析與應用場景

Xela矩陣三軸觸覺傳感器通過先進技術模擬人類觸覺感知,幫助設備實現精確的力測量與位移監測。其核心功能基于磁性三維力測量與空間位移測量,能夠捕捉多維觸覺信息。該傳感器的設計不僅提升了觸覺感知的精度,還為機器人、醫療設備和制造業的智…

RK3288項目(四)--linux內核之V4L2框架及ov9281驅動分析(中)

目錄 一、引言 二、V4L2其他部件驅動分析 ------>2.1、mipi-dphy ------------>2.1.1、dts ------------>2.1.2、driver ------------>2.1.3、notifier機制 ------------>2.1.4、異步回調 ------------>2.1.5、V4L2 subdev ------>2.2、mipi-csi…

容器-使用slim減少10x+大模型鏡像

slim(原docker-slim)是一個開源工具,全稱SlimToolkit(https://github.com/slimtoolkit/slim),用于基于已有的Docker鏡像減小鏡像的大小,同時盡可能保留容器的功能。它通過分析鏡像的運行環境和應…

Golang基礎學習

?????????? 初見golang語法 go項目路徑 cd $GOPATH //ls可以看到有bin,pkg,src三個文件 cd src/ mkdir GolangStudy cd GolangStudy mkdir firstGolanggo程序執行: go run hello.go//如果想分兩步執行: go build hello.go ./hello導入包的…

OPenCV CUDA模塊圖像處理-----對圖像執行 均值漂移濾波(Mean Shift Filtering)函數meanShiftFiltering()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 在 GPU 上對圖像執行 均值漂移濾波(Mean Shift Filtering),用于圖像分割或平滑處理。 該函數將輸入圖像中的…

電路圖識圖基礎知識-遠程/本地啟停電動機(二十一)

在實際的生產中,經常會需要電動機的控制可以就地控制和遠方控制,在集中的控制室中,遠 方控制電動機的啟動、停止。在就地設置啟動、停止按鈕或是緊急停車按鈕,以滿足生產的需要。 1.遠程、多點及連鎖控制電動機電路 2.元器件配置…

SpringBoot+uniapp 的 Champion 俱樂部微信小程序設計與實現,論文初版實現

摘要 本論文旨在設計并實現基于 SpringBoot 和 uniapp 的 Champion 俱樂部微信小程序,以滿足俱樂部線上活動推廣、會員管理、社交互動等需求。通過 SpringBoot 搭建后端服務,提供穩定高效的數據處理與業務邏輯支持;利用 uniapp 實現跨平臺前…

【深度學習新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配問題) 是機器學習,尤其是強化學習(RL)中的核心挑戰之一,指的是如何將最終的獎勵或懲罰準確地分配給導致該結果的各個中間動作或決策。在序列決策任務中,智能體執行一系列動作后獲得一個最終獎勵,但每個動作對最終結果的貢獻程度往往…

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

這個警告表明您在使用Vue的esm-bundler構建版本時,未明確定義編譯時特性標志。以下是詳細解釋和解決方案: ?問題原因?: 該標志是Vue 3.4引入的編譯時特性標志,用于控制生產環境下SSR水合不匹配錯誤的詳細報告1使用esm-bundler…

Vue.js教學第二十一章:vue實戰項目二,個人博客搭建

基于 Vue 的個人博客網站搭建 摘要: 隨著前端技術的不斷發展,Vue 作為一種輕量級、高效的前端框架,為個人博客網站的搭建提供了極大的便利。本文詳細介紹了基于 Vue 搭建個人博客網站的全過程,包括項目背景、技術選型、項目架構設計、功能模塊實現、性能優化與測試等方面。…