深度學習——基于卷積神經網絡實現食物圖像分類【1】(datalodar處理方法)

1. 項目概述

在這個項目中,我們將使用PyTorch框架構建一個卷積神經網絡(CNN)來實現食物圖像分類任務。我們的數據集包含20種不同的食物類別,包括八寶粥、巴旦木、白蘿卜、板栗等常見食物。本文將詳細介紹從數據準備、模型構建到訓練和評估的完整流程。

2. 環境準備

首先,我們需要導入必要的Python庫:

import torch
import torchvision.models as models
from torch import nn
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms
from PIL import Image
import numpy as np
import os

3. 數據準備與預處理

3.1 數據轉換定義

我們定義了兩組數據轉換,分別用于訓練集和驗證集:

data_transforms = {'train': transforms.Compose([transforms.Resize([256,256]),   # 統一圖像大小為256x256transforms.ToTensor(),          # 轉換為PyTorch張量]),'valid': transforms.Compose([transforms.Resize([256,256]),transforms.ToTensor(),]),
}
3.2?數據文件準備

我們編寫了一個函數來生成包含圖像路徑和標簽的文本文件:

def train_test_file(root, dir):file_txt = open(dir+'.txt','w')path = os.path.join(root, dir)for roots, directories, files in os.walk(path):if len(directories) != 0:dirs = directorieselse:now_dir = roots.split('\\')for file in files:path_1 = os.path.join(roots, file)file_txt.write(path_1+' '+str(dirs.index(now_dir[-1]))+'\n')file_txt.close()# 調用函數生成訓練集和測試集文件
root = r'.\食物分類\food_dataset'
train_dir = 'train'
test_dir = 'test'
train_test_file(root, train_dir)
train_test_file(root, test_dir)
  • 生成的 txt 文件如下所示,包含圖片的路徑、類別和對應的標簽

在這里插入圖片描述

3.3 自定義數據集類

我們創建了一個繼承自torch.utils.data.Dataset的自定義數據集類:

class food_dataset(Dataset):def __init__(self, file_path, transform=None):self.file_path = file_pathself.imgs = []self.labels = []self.transform = transformwith open(self.file_path) as f:samples = [x.strip().split(' ') for x in f.readlines()]for img_path, label in samples:self.imgs.append(img_path)self.labels.append(label)def __len__(self):return len(self.imgs)def __getitem__(self, idx):image = Image.open(self.imgs[idx])if self.transform:image = self.transform(image)label = self.labels[idx]label = torch.from_numpy(np.array(label, dtype=np.int64))return image, label
3.4 創建數據加載器
training_data = food_dataset(file_path='train.txt', transform=data_transforms['train'])
test_data = food_dataset(file_path='test.txt', transform=data_transforms['valid'])train_dataloader = DataLoader(training_data, batch_size=16, shuffle=True)
test_dataloader = DataLoader(test_data, batch_size=16, shuffle=True)

4. 模型構建

我們定義了一個包含三個卷積層的CNN模型:

class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()# 第一個卷積塊self.conv1 = nn.Sequential(nn.Conv2d(3, 16, 5, 1, 2),  # (16,256,256)nn.ReLU(),nn.MaxPool2d(2),             # (16,128,128))# 第二個卷積塊self.conv2 = nn.Sequential(nn.Conv2d(16, 32, 5, 1, 2),  # (32,128,128)nn.ReLU(),nn.MaxPool2d(2),            # (32,64,64))# 第三個卷積塊self.conv3 = nn.Sequential(nn.Conv2d(32, 64, 5, 1, 2),  # (64,64,64)nn.ReLU(),nn.MaxPool2d(2),             # (64,32,32))# 全連接層self.out = nn.Linear(64*32*32, 20)def forward(self, x):x = self.conv1(x)x = self.conv2(x)x = self.conv3(x)x = x.view(x.size(0), -1)      # 展平操作output = self.out(x)return output

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

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

相關文章

華中科大聯手小米推出ReCogDrive:自動駕駛迎來“認知革命”!

1.【前言】 在開放道路中實現安全、平穩、泛化的自動駕駛,是智能交通領域的“圣杯”。盡管近年來 端到端自動駕駛(End-to-End Autonomous Driving, E2E-AD) 框架(如 UniAD、VAD)在 NuScenes 等基準中展現出優異表現&a…

基于 Spring AMQP 的 RabbitMQ 分布式消息系統實戰

在分布式系統中,服務間的解耦與異步通信是關鍵挑戰。RabbitMQ 作為一款成熟的消息中間件,憑借其靈活的交換器模型(Direct/Fanout/Topic)、可靠的消息傳遞機制(持久化、確認機制)和豐富的客戶端支持&#xf…

計算機網絡:天氣預報

一、預期結果程序運行輸入所要查詢的地點,然后出現三個選項實時天氣、未來天氣、生活指數。二、實現思路(一)Ubuntu中利用NOWapi服務器獲取訪問數據api地址,然后創建客戶端利用TCP、IPV4協議分別訪問實時天氣,未來天氣…

GD32VW553-IOT OLED移植

1.前言 本來想用他自身的硬件I2C實現的,但是不知道為啥跑demo一點波形都沒有,改成推挽也沒有波形,只有初始化的電平變化,而且I2C的驅動庫好像有點復雜,起始信號結束信號都得單獨發的,沒有一個全部封裝好的庫…

刀客doc:Instagram會成為Meta廣告業務的第二曲線嗎?

文/刀客doc(頭條深一度精選作者)一如果現在還用“Facebook的小弟”來定義Instagram,多少顯得有些過時了。在和一些出海品牌負責人聊天時,我有個很明顯的感受:他們已經不會再把Instagram當成“附屬資源”去看待。到2025年第二季度,…

Python日期計算完全指南:從上周五到任意日期的高效計算

引言:日期計算的核心價值在業務系統開發中,日期計算是高頻且關鍵的需求。根據2024年企業系統調查報告:85%的財務系統需要計算上周五(工資結算日)78%的報表系統依賴周數據統計92%的供應鏈系統使用工作日計算65%的BI工具…

達夢數據庫-重做日志文件(一)

達夢數據庫-重做日志文件(redo)(一) 1.查看redo文件 SQL> select * from v$rlogfile;行號 GROUP_ID FILE_ID PATH CLIENT_PATH CREATE_TIME RLOG_SIZE MIN_EXEC_VER MIN_DCT_VER ---------- ----------…

STM32CubeMX 6.15.0 + CLion

-DCMAKE_TOOLCHAIN_FILE./cmake/gcc-arm-none-eabi.cmake 參考 Clion進行嵌入式開發生成.hex文件教程_clion hex-CSDN博客

redis添加超時設置

redis添加參數的超時設置, 并且需要加鎖,一開始是用redisTemplate.opsForValue().setIfAbsent("key","value",1,TimeUnit.SECONDS);結果發現這種方式直接會返回空指針錯誤所以只能對方法加鎖來解決加鎖和超時的問題import lombok.extern.slf4j.Slf4j; impo…

七牛云實踐:我們如何用 AIGC 將產品開發從“人想圖”變為“圖選圖”

在火熱進行中的2025深圳國際文創展上,AI玩具、數字藝術等新興品類無疑成為了焦點。表面的喧囂之下,一個更深層次的變革正在悄然發生:驅動這些創新產品誕生的底層工作流,正在被AIGC技術深刻影響。 對于身處其中的產品經理、設計師和…

醫療器械企業如何做好多系統權限管理?解析PLM、ERP、MES權限角色

在醫療器械這個高度專業化、強監管的行業,數字化轉型不僅意味著效率提升,更關乎合規與安全。當企業將業務流程從研發、生產、銷售到售后,逐步遷移到ERP、PLM、MES、CRM等各類數字系統中時,一個關鍵而又常常被忽視的問題浮出水面&a…

藍凌研究院《2025上市公司AI數智化轉型白皮書》發布

上市公司是國民經濟基本盤。目前中國境內上市公司達5420家,加上海外上市公司總數會更多。上市公司群體是國民經濟的基本盤,其發展態勢深刻映照著經濟轉型的脈搏與韌性。目前,中國在境內上市的公司總數達5420家,加上海外上市的公司…

OpenFOAM并行區域分解生成的polymesh文件解釋

文章目錄OpenFOAM里區域分解后polymesh文件解釋🔹 1. What is polyMesh?🔹 2. Domain Decomposition Overview🔹 3. How decomposePar Works with polyMeshKey Output Files in processorX/polyMesh/:🔹 4. Types of Decompositi…

前端-npm和yarn的安裝以及區別

目錄 一.安裝npm或yarn 安裝Yarn 🖥? macOS / Linux 方式 1:通過 npm 安裝(最簡單) 方式 2:通過系統包管理器 🪟 Windows 方法 1:用 npm 安裝 方法 2:用 MSI 安裝包 方法 3&#x…

通信原理實驗之線性均衡器-迫零算法

通信原理實驗之線性均衡器-迫零算法一、實驗目的1、了解線性均衡器;2、了解迫零算法;3、熟悉眼圖的使用。二、實驗儀器1、序列碼產生2、信號中繼器3、加多徑干擾4、迫零均衡5、信號分布圖 6、眼圖三、實驗的理論基礎1.線性均衡器:信道均衡技術…

把 AI 塞進「智能手環」——基于心率變異的零樣本壓力監測手環

標簽:心率變異、壓力監測、零樣本、智能手環、TinyML、RISC-V、低功耗、邊緣 AI ---- 1. 背景:為什么手環要「測壓力」? 現代生活壓力大,全球 30% 的人有焦慮癥狀,但傳統手環: ? 只能測心率,無…

fastapi項目細節和啟動順序

要搞清楚 FastAPI 項目啟動的執行邏輯,需要先明確 “項目啟動流程”“main 函數角色”“lifespan 作用”“導入語句執行時機” 這幾個核心點的關系,下面逐一拆解:一、FastAPI 項目啟動:先執行 “導入語句”,再執行 “m…

Fluent Bit系列:字符集轉碼測試(上)

#作者:程宏斌 文章目錄gbk2utf8.lua 腳本說明在主配置中配置過濾器。如何在Linux系統中手動生成GBK日志?驗證日志轉碼的準確性測試測試方案fluent-bit 3.0.2 轉換測試這部分內容分為兩個任務: 是驗證 Lua 腳本是否能夠將 GBK 編碼的文本轉換為…

ApiFox高并發測試用例

介紹 在開發中我們經常會測試高并發場景下的業務,下面來看看如何使用ApiFox編寫一個高并發的測試用例 編寫接口 第一步我們要編寫測試的接口,并且建立一個用例 自動化測試 將上面的測試用例添加到自動化測試中,設置并發參數即可&#xff0c…

【MySQL數據庫入門課程】開課啦!

📣 【MySQL數據庫入門課程】開課啦! 課程名稱:MySQL數據庫實戰入門(零基礎友好版) 開課時間:2025年9月1日 授課方式:線上免費學習 實操練習 教師全程指導 適合人群:中職學校計算機…