深度学习——基于卷积神经网络实现食物图像分类【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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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日 授课方式:线上免费学习 实操练习 教师全程指导 适合人群:中职学校计算机…