当前位置: 首页 > article >正文

深度学习之优化模型(数据预处理,数据增强,调整学习率)

一、模型的准备这次我们使用的数据集是一共有20种的食物图片其中各种食物文件夹中食物图片现在我们对这个文件生成对应的train.txt和test.txt功能创建训练集/测试集的标签文件 参数 root数据集根目录 dir子目录名 import os#导入操作系统模块用于处理文件和路径 def train_test_file(root,dir): file_txt open(dir.txt,w)#创建txt文件w表示写入会覆盖原有内容 pathos.path.join(root,dir)#拼接完整路径 for roots,directories,files in os.walk(path):#遍历目录树os.walk返回三个值当前目录路径子目录列表文件列表 if len(directories) !0:#如果第一层有子目录记录所有类别名 dirsdirectories else: now_dirroots.split(\\)#到达图片文件所在层最底层分割路径获取当前类别文件夹名用反斜杠分割路径 for file in files:#拼接图片完整路径 path_1os.path.join(roots,file) print(path_1)#打印路径调试能用到 file_txt.write(path_1 str(dirs.index(now_dir[-1]))\n)#写入txt文件 #dirs.indexnow_dir[-1]:获取当前类别的数字标签也就是类别 file_txt.close() rootrD:\filedata\food_dataset#数据集根目录 train_dirtrain#训练集文件夹名 test_dirtest#测试集文件夹名 train_test_file(root,train_dir)#生成训练集标签文件train.txt train_test_file(root,test_dir)#生成测试集文件训练集文件二、数据预处理和数据增强数据预处理就是对所有数据进行数据增强标准化归一化去噪等操作而其中的数据增强指增加数据多样性是对数据裁剪大小变换旋转亮度调整等操作。数据增强是数据预处理的一部分数据增强专门用来产生一些新的数据。这些操作能让机器学会一张图片的几种呈现状态而不是只认识原图这样模型在现实中遇到各种情况的图片时都能正确识别。数据预处理不宜少也不宜多不做数据预处理模型就会比较死板也就是泛化能力差。过度的数据增强会让模型过拟合所以需要自己调整添加适量的预处理。预处理特别是Resize和ToTensor能省很多麻烦不然图片大小不一、格式不对模型根本没法训练。class USE_getitem(): def __init__(self,text): self.texttext def __getitem__(self, index): resultself.text[index].upper() return result def __len__(self): return len(self.text) p USE_getitem(pytorch) print(p[0],p[1]) print(len(p)) #让对象能像列表一样用下标访问和获取长度 import torch from torch.utils.data import Dataset,DataLoader import numpy as np from PIL import Image from torchvision import transforms import torch.nn as nn #导入会用到的库 数据预处理 data_transforms{ train: transforms.Compose([#数据增强 transforms.Resize([280,280]),#先把图片缩放到280x280 transforms.RandomCrop(256),#随机裁剪到256x256 transforms.RandomHorizontalFlip(p0.5),#50%概率水平翻转 transforms.ColorJitter(brightness0.1,contrast0.1),#调整亮度#,saturation0.1,hue0.1 transforms.ToTensor(),#转成张量 ]), valid: transforms.Compose([ transforms.Resize([256,256]),#测试时就直接缩放到256x256 transforms.ToTensor(),#转成张量 ]), } #数据集读取食物图片 class food_dataset(Dataset): def __init__(self,file_path,transformNone):#从train.txt或test.txt读取图片路径和标签 self.file_pathfile_path self.imgs[] self.labels[] self.transformtransform with 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):#读取图片如果有transform就处理返回图片和标签 imageImage.open(self.imgs[idx]) if self.transform: imageself.transform(image) labelself.labels[idx] labelint(label) labeltorch.from_numpy(np.array(label,dtypenp.int64)) return image,label #数据加载 training_datafood_dataset(file_pathr.\train.txt,transformdata_transforms[train]) test_datafood_dataset(file_pathr.\test.txt,transformdata_transforms[valid]) train_dataloaderDataLoader(training_data, batch_size64,shuffleTrue) test_dataloaderDataLoader(test_data, batch_size64,shuffleTrue) #自定义cnn模型 class CNN(nn.Module): def __init__(self): super(CNN,self).__init__() self.conv1nn.Sequential( nn.Conv2d( in_channels3, out_channels16, kernel_size5, stride1, padding2, ), nn.ReLU(), nn.MaxPool2d(kernel_size2), ) self.conv2nn.Sequential( nn.Conv2d(16,32,5,1,2), nn.ReLU(), nn.Conv2d(32,32,5,1,2), nn.ReLU(), nn.MaxPool2d(2), ) self.conv3nn.Sequential( nn.Conv2d(32,128,5,1,2), nn.ReLU(), ) self.dropoutnn.Dropout(0.3) self.outnn.Linear(128*64*64,20)#三层卷积层最后输出20个类别 def forward(self,x):#前向传播卷积-展平-全连接 xself.conv1(x) xself.conv2(x) xself.conv3(x) xx.view(x.size(0),-1) outputself.out(x) return output #设备设置和模型初始化 device cuda if torch.cuda.is_available() else mps if torch.backends.mps.is_available() else cpu model CNN().to(device) #训练函数 def train(dataloader,model,loss_fn,optimizer): model.train() batch_size_num1#统计训练的batch数量 for X,y in dataloader: X,y X.to(device),y.to(device) # 把训练数据集和标签传入cpu或GPU pred model.forward(X)#前向计算 loss loss_fn(pred,y)#计算损失 optimizer.zero_grad()#梯度清零 loss.backward()#反向传播 optimizer.step()#更新参数 loss_value loss.item() # if batch_size_num %100: print(floss:{loss_value:7f} [number:{batch_size_num}]) batch_size_num 1 #测试函数 def test (dataloader,model,loss_fn): sizelen(dataloader.dataset) num_batchslen(dataloader) model.eval() test_loss, correct 0,0 with torch.no_grad(): for X,y in dataloader: X,y X.to(device),y.to(device) pred model.forward(X) test_loss loss_fn(pred,y).item() # test_loss是会自动累加每一个批次的损失值 correct (pred.argmax(1) y).type(torch.float).sum().item() # 标量 test_loss / num_batchs correct / size accuracy 100*correct print(fTest result: \n Accuracy :{(accuracy)}%,Avg loss:{test_loss}) return accuracy #损失函数 loss_fnnn.CrossEntropyLoss() #优化器 # optimizer torch.optim.SGD(model.parameters(),lr0.001)#尝试不同的值可以确保最后的准确率 optimizer torch.optim.Adam(model.parameters(), lr0.0001) #训练循环 best_acc 0 epochs50 for t in range(epochs): print(fEpoch{t1}\n------) train(train_dataloader,model,loss_fn,optimizer) current_acctest(test_dataloader, model, loss_fn) if current_acc best_acc: best_acc current_acc torch.save(model.state_dict(),best_model.pth) print(f最佳模型准确率{best_acc:.2f}%) print(Dnoe!) print(f最佳模型准确率{best_acc:.2f}%)结果此外有两个小点也会影响准确率可以微调模型。1优化器中学习率值也就是这里的lr0.0001可以尝试其他值。太大正确率波动大可能错过最优点太小训练慢可能卡在局部最优点2epoch值是训练循环次数。次数少模型可能没学够正确率低太多可能过拟合训练集正确率高测试集反而低。四、调整学习率调度器1.固定步长调度器StepLR在优化器后边加上有时候这个导入可能是呈灰色的可能是编码工具的原因代码是能运行的。from torch.optim.lr_scheduler import StepLR schedulertorch.optim.lr_scheduler.StepLR(optimizer,step_size10,gamma0.5)在训练循环中if current_acc best_acc:前面加上三行如下best_acc 0 epochs50 for t in range(epochs): print(fEpoch{t1}\n------) train(train_dataloader,model,loss_fn,optimizer) current_acctest(test_dataloader, model, loss_fn) scheduler.step() current_lroptimizer.param_groups[0][lr] print(f当前学习率{current_lr:.6f}) if current_acc best_acc: best_acc current_acc torch.save(model.state_dict(),best_model.pth) print(f最佳模型准确率{best_acc:.2f}%) print(Dnoe!) print(f最佳模型准确率{best_acc:.2f}%)这里学习率没有提升可以修改里面的参数进行对比但有时候可能是模型已经收敛所以调度器对它影响不大需要知道的是调度器也是优化模型的一种方法。2.ReduceLROnPlateau调度器也是在优化器后边加上from torch.optim.lr_scheduler import ReduceLROnPlateau # scheduler ReduceLROnPlateau(optimizer, patience5, factor0.1) #这样写我们需要修改训练函数让他有个返回值比较麻烦 scheduler ReduceLROnPlateau(optimizer, modemax, patience5, factor0.1, verboseTrue) #这样就不需要修改训练函数了 # modemax 表示监控指标越大越好如准确率如果监控 loss 就用 modemin #这里用了max我们后边就监控准确率用min就监控损失函数 #监控的指标不同结果也是不同的不过都是为了增加模型准确率既然是更高准确率那用max就更直接和上一个调度器不一样的是这里我们需要填一个参数根据上面所述我们使用了max就填入准确率scheduler.step(current_acc)调度器的选择也需要我们自己去尝试哪个更合适模型

相关文章:

深度学习之优化模型(数据预处理,数据增强,调整学习率)

一、模型的准备这次我们使用的数据集是一共有20种的食物图片其中各种食物文件夹中食物图片现在我们对这个文件生成对应的train.txt和test.txt功能:创建训练集/测试集的标签文件 参数: root:数据集根目录 dir:子目录名import os#导…...

MogFace人脸检测简单调用:Python API封装与Streamlit前端集成方法

MogFace人脸检测简单调用:Python API封装与Streamlit前端集成方法 1. 项目概述 MogFace是2022年CVPR会议上提出的一种高精度人脸检测模型,基于ResNet101架构设计,在检测多尺度、多姿态和遮挡人脸方面表现出色。本文将介绍如何通过简单的Pyt…...

深度学习之神经网络的构建和实现

一、卷积神经网络CNN图象在计算机中是一对按照顺序排列的数字,数字在0~255之间1.卷积层卷积是什么:对图像(不同的窗口数据)和卷积核(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看…...

清音刻墨效果惊艳:Qwen3支持ASR后编辑(post-editing)的增量式字幕刻墨

清音刻墨效果惊艳:Qwen3支持ASR后编辑(post-editing)的增量式字幕刻墨 你有没有遇到过这样的烦恼?辛辛苦苦做了一段视频,上传到平台后,发现自动生成的字幕时间轴对不上,要么字幕提前消失&#…...

乙巳马年春联生成终端部署教程:GPU显存优化下的毫秒级对联生成

乙巳马年春联生成终端部署教程:GPU显存优化下的毫秒级对联生成 1. 教程目标与价值 想在新年活动中,用一个极具视觉冲击力的AI应用来吸引眼球吗?今天要介绍的这个“皇城大门春联生成终端”,就能帮你实现这个想法。 这不是一个普…...

丹青识画开源模型部署教程:支持FP16量化与TensorRT加速推理

丹青识画开源模型部署教程:支持FP16量化与TensorRT加速推理 1. 引言:开启智能影像雅鉴之旅 想象一下,你上传一张普通的照片,系统不仅能准确识别画面内容,还能用优雅的中式书法为你生成富有诗意的描述。这就是「丹青识…...

Bidili Generator效果展示:跨文化元素融合——敦煌壁画风格×未来科技感生成

Bidili Generator效果展示:跨文化元素融合——敦煌壁画风格未来科技感生成 1. 引言:当千年壁画遇见未来科技 想象一下,如果敦煌壁画里的飞天仙女,手持的不是琵琶,而是发光的能量武器;如果壁画中的祥云瑞兽…...

Retinaface+CurricularFace部署教程:CentOS/Ubuntu双系统GPU驱动兼容性验证

RetinafaceCurricularFace部署教程:CentOS/Ubuntu双系统GPU驱动兼容性验证 你是不是也遇到过这样的问题:好不容易在Ubuntu上把一个人脸识别模型跑通了,换到CentOS服务器上,同样的代码、同样的模型,却死活跑不起来&…...

通义千问1.5-1.8B-Chat-GPTQ-Int4效果实测:中文法律文书生成与条款合规性检查

通义千问1.5-1.8B-Chat-GPTQ-Int4效果实测:中文法律文书生成与条款合规性检查 1. 模型介绍与部署验证 通义千问1.5-1.8B-Chat-GPTQ-Int4是一个经过量化压缩的中文语言模型,专门针对聊天对话场景进行了优化。这个模型采用了GPTQ-Int4量化技术&#xff0…...

RVC训练监控技巧:TensorBoard集成与损失曲线可视化

RVC训练监控技巧:TensorBoard集成与损失曲线可视化 1. 引言:为什么训练监控如此重要? 如果你用过RVC(Retrieval-based-Voice-Conversion)训练自己的声音模型,肯定遇到过这样的困惑:训练到底进…...

Qwen3-TTS开源大模型教程:前端CSS动画与后端TTS响应延迟协同优化

Qwen3-TTS开源大模型教程:前端CSS动画与后端TTS响应延迟协同优化 1. 引言:当复古像素风遇上AI语音合成 想象一下,你正在玩一款经典的8-bit像素游戏。你输入一段台词,描述一个“焦急得快要哭出来”的语气,然后点击一个…...

Starry Night Art Gallery应用场景:广告公司AI生成高端品牌视觉提案

Starry Night Art Gallery应用场景:广告公司AI生成高端品牌视觉提案 1. 引言:当广告创意遇见AI艺术馆 想象一下这个场景:一家高端腕表品牌即将发布新品,市场部需要在三天内拿出一套完整的视觉提案,包含主视觉海报、社…...

YOLO12效果展示:同一场景不同光照条件下YOLO12鲁棒性测试集

YOLO12效果展示:同一场景不同光照条件下YOLO12鲁棒性测试集 1. 测试背景与目的 目标检测模型在实际应用中经常面临各种光照条件的挑战。从明亮的正午阳光到昏暗的黄昏光线,再到夜间低照度环境,光照变化会显著影响检测性能。本次测试旨在全面…...

Nano-Banana Studio企业落地:ERP系统对接自动生成BOM可视化附件

Nano-Banana Studio企业落地:ERP系统对接自动生成BOM可视化附件 1. 项目背景与价值 在现代制造业中,BOM(Bill of Materials,物料清单)是产品生产的核心数据。传统ERP系统中的BOM通常以表格形式存在,缺乏直…...

计算机视觉opencv之视频滤波边界填充图像形态学边缘检测

一、视频滤波这里是对一个视频进行读取,并对视频每一帧生成噪声,最后利用中值滤波清理噪声并保持视频清晰import cv2def add_peppersalt_noise(image, n10000):import numpy as npresult image.copy()h, w image.shape[:2]for i in range(n):x np.ran…...

卡证检测矫正模型代码实例:Python调用接口+JSON结果解析示范

卡证检测矫正模型代码实例:Python调用接口JSON结果解析示范 1. 引言 你有没有遇到过这样的场景?需要批量处理一堆身份证、护照或驾照的照片,手动裁剪、矫正角度,不仅效率低下,还容易出错。或者,你的业务系…...

桌面整理规划程序,按使用频率摆放物品,提高找东西速度,工作更专注。

🖥️ 智能桌面整理规划系统 (Smart Desk Organizer)一、实际应用场景描述场景设定:深夜加班的“寻物迷宫”凌晨1点,全栈工程师阿强正在赶一个紧急需求。1. 打断时刻:他需要插入U盘拷贝文件,但在杂乱的桌面上摸索了整整…...

Qwen2.5-VL-7B-Instruct实战教程:构建带历史记录的多轮图文对话Web应用

Qwen2.5-VL-7B-Instruct实战教程:构建带历史记录的多轮图文对话Web应用 1. 项目介绍与准备工作 Qwen2.5-VL-7B-Instruct是一款强大的多模态视觉-语言模型,能够同时理解图像和文本内容,并进行智能对话。本教程将带你从零开始,部署…...

Stable-Diffusion-v1-5-archive风格迁移实战:将照片转为油画/水彩/像素风三步法

Stable-Diffusion-v1-5-archive风格迁移实战:将照片转为油画/水彩/像素风三步法 你是不是也有一堆普通的照片,想给它们换个风格,变成一幅油画、一张水彩画,或者复古的像素风游戏截图?自己学画画太费时间,用…...

Qwen3-ASR-1.7B高性能部署:GPU算力适配RTX4090/3090/3060实测对比

Qwen3-ASR-1.7B高性能部署:GPU算力适配RTX4090/3090/3060实测对比 最近在折腾语音识别项目,发现阿里云通义千问团队开源的Qwen3-ASR-1.7B模型效果确实不错。这个1.7B参数的高精度版本,支持52种语言和方言,识别准确率比之前的0.6B…...

wan2.1-vae新手教程:5分钟掌握提示词书写、负面词设置、尺寸选择核心操作

wan2.1-vae新手教程:5分钟掌握提示词书写、负面词设置、尺寸选择核心操作 你是不是也遇到过这种情况:看到别人用AI生成的图片又美又酷,自己上手一试,出来的图却总是奇奇怪怪,要么是人物多根手指,要么是背景…...

SecGPT-14B部署案例:中小企业安全运营中心(SOC)轻量化AI分析终端搭建

SecGPT-14B部署案例:中小企业安全运营中心(SOC)轻量化AI分析终端搭建 1. 项目背景与价值 在网络安全形势日益严峻的今天,中小企业安全运营中心(SOC)面临着专业人才短缺、分析工具昂贵、响应速度慢等痛点。…...

Qwen2.5-VL-Chord商业应用:机器人导航中视觉-语言对齐方案

Qwen2.5-VL-Chord商业应用:机器人导航中视觉-语言对齐方案 1. 项目简介 1.1 什么是Chord视觉定位服务? Chord是一个基于Qwen2.5-VL多模态大模型的智能视觉定位系统。它能够理解自然语言描述,并在图像中精确定位目标对象,返回准…...

墨语灵犀效果实录:爱尔兰盖尔语民谣→中文乐府体译文的音节与情感映射

墨语灵犀效果实录:爱尔兰盖尔语民谣→中文乐府体译文的音节与情感映射 1. 引言:当古老民谣遇见AI诗意翻译 在语言翻译的世界里,有一种特殊的挑战——将充满文化底蕴的古老民谣,不仅准确翻译,还要保留原有的韵律美和情…...

TinyNAS搜索空间约束:DAMO-YOLO轻量化中延迟与精度的Pareto前沿分析

TinyNAS搜索空间约束:DAMO-YOLO轻量化中延迟与精度的Pareto前沿分析 1. 项目概述 1.1 这是什么系统? 这是一个基于DAMO-YOLO和TinyNAS技术的实时手机检测系统,专门为移动端低算力场景设计。系统通过Web界面提供简单易用的手机检测功能&…...

ChatTTS错误排查手册:常见问题诊断与解决方案

ChatTTS错误排查手册:常见问题诊断与解决方案 1. 引言 ChatTTS作为目前开源界最逼真的语音合成模型之一,凭借其自然的停顿、换气声和笑声效果,让语音合成听起来完全不像机器人。但在实际使用过程中,用户可能会遇到各种问题&…...

AWPortrait-Z开源模型部署避坑指南:端口冲突/LoRA加载失败/历史不刷

AWPortrait-Z开源模型部署避坑指南:端口冲突/LoRA加载失败/历史不刷新 本文基于实际部署经验,总结AWPortrait-Z人像美化模型部署中的常见问题及解决方案,帮助开发者快速避开部署陷阱。 1. 环境准备与快速部署 1.1 系统要求与前置检查 在开始…...

Qwen2.5-VL-7B-Instruct惊艳效果:支持多图对比推理(如前后对比图分析)

Qwen2.5-VL-7B-Instruct惊艳效果:支持多图对比推理(如前后对比图分析) 你有没有遇到过这样的情况?拿到两张图片,一张是装修前的毛坯房,一张是装修后的效果图,想快速总结出设计师做了哪些改动。…...

VideoAgentTrek-ScreenFilterAI应用:作为AIGC视频生成pipeline的内容安全过滤层

VideoAgentTrek-ScreenFilterAI应用:作为AIGC视频生成pipeline的内容安全过滤层 1. 引言 想象一下,你刚刚用AI生成了一个精彩的短视频,画面里有手机、电脑屏幕,甚至还有街边的广告牌。正准备发布时,一个念头闪过&…...

MusePublic圣光艺苑保姆级教程:从CSDN镜像下载到本地离线部署全过程

MusePublic圣光艺苑保姆级教程:从CSDN镜像下载到本地离线部署全过程 1. 引言:开启你的数字艺术之旅 想象一下,你拥有一间属于自己的数字画室,这里没有颜料的气味,没有画布的纹理,但却能创造出媲美梵高星空…...