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

专业的培训行业网站开发wordpress 注册 填写密码错误

专业的培训行业网站开发,wordpress 注册 填写密码错误,如何去掉WordPress的标志,百度做网站好吗文章目录 引言一、项目概述二、环境准备三、数据预处理3.1 数据增强与标准化3.2 数据集准备 四、自定义数据集类五、构建CNN模型六、训练与评估6.1 训练函数6.2 评估函数6.3 训练流程 七、关键技术与优化八、常见问题与解决九、完整代码十、总结 引言 本文将详细介绍如何使用P… 文章目录 引言一、项目概述二、环境准备三、数据预处理3.1 数据增强与标准化3.2 数据集准备 四、自定义数据集类五、构建CNN模型六、训练与评估6.1 训练函数6.2 评估函数6.3 训练流程 七、关键技术与优化八、常见问题与解决九、完整代码十、总结 引言 本文将详细介绍如何使用PyTorch框架构建一个食物图像分类系统涵盖数据预处理、模型构建、训练和评估全过程。我们将使用自定义的食物数据集构建一个卷积神经网络(CNN)模型并实现完整的训练流程。 一、项目概述 食物图像分类是计算机视觉中的一个常见应用场景。在本项目中我们将构建一个能够识别20种不同食物的分类系统。整个流程包括 数据准备与预处理构建自定义数据集类设计CNN模型架构训练模型并评估性能优化与结果分析 二、环境准备 首先确保已安装必要的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.1 数据增强与标准化 我们为训练集和验证集分别定义不同的转换策略 data_transforms {train: transforms.Compose([transforms.Resize([300,300]),transforms.RandomRotation(45),transforms.CenterCrop(256),transforms.RandomHorizontalFlip(p0.5),transforms.RandomVerticalFlip(p0.5),transforms.ColorJitter(brightness0.2, contrast0.1, saturation0.1, hue0.1),transforms.RandomGrayscale(p0.1),transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]),valid: transforms.Compose([transforms.Resize([256,256]),transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]), }关键点解析 训练集增强 随机旋转(-45°到45°)随机水平和垂直翻转色彩抖动(亮度、对比度、饱和度和色调)随机灰度化(概率10%) 标准化处理 使用ImageNet的均值和标准差进行归一化有助于模型更快收敛 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()该函数会遍历指定目录生成包含图像路径和对应标签的文本文件。 四、自定义数据集类 我们继承PyTorch的Dataset类创建自定义数据集 class food_dataset(Dataset):def __init__(self, file_path, transformNone):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, dtypenp.int64))return image, label关键方法 __init__: 初始化数据集读取标注文件__len__: 返回数据集大小__getitem__: 根据索引返回图像和标签应用预处理 五、构建CNN模型 我们设计了一个三层的CNN网络 class CNN(nn.Module):def __init__(self):super(CNN,self).__init__()self.conv1 nn.Sequential(nn.Conv2d(3, 16, 5, 1, 2),nn.ReLU(),nn.MaxPool2d(kernel_size2))self.conv2 nn.Sequential(nn.Conv2d(16,32,5,1,2),nn.ReLU(),nn.MaxPool2d(kernel_size2))self.conv3 nn.Sequential(nn.Conv2d(32, 64, 5, 1, 2),nn.ReLU(),nn.MaxPool2d(kernel_size2))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网络结构分析 卷积层1 输入通道3 (RGB)输出通道16卷积核5×5输出尺寸(16, 128, 128) 卷积层2 输入通道16输出通道32输出尺寸(32, 64, 64) 卷积层3 输入通道32输出通道64输出尺寸(64, 32, 32) 全连接层 输入64×32×32 65536输出20 (对应20类食物) 六、训练与评估 6.1 训练函数 def train(dataloader, model, loss_fn, optimizer):model.train()batch_size_num 1for X, y in dataloader:X, y X.to(device), y.to(device)pred model(X)loss loss_fn(pred, y)optimizer.zero_grad()loss.backward()optimizer.step()loss_value loss.item()if batch_size_num % 1 0:print(floss: {loss_value:7f} [number:{batch_size_num}])batch_size_num 16.2 评估函数 def Test(dataloader, model, loss_fn):size len(dataloader.dataset)num_batches len(dataloader)model.eval()test_loss, correct 0, 0with torch.no_grad():for X, y in dataloader:X, y X.to(device), y.to(device)pred model(X)test_loss loss_fn(pred, y).item()correct (pred.argmax(1) y).type(torch.float).sum().item()test_loss / num_batchescorrect / sizeprint(fTest result: \n Accuracy:{(100*correct)}%, Avg loss:{test_loss})6.3 训练流程 # 初始化模型 model CNN().to(device)# 定义损失函数和优化器 loss_fn nn.CrossEntropyLoss() optimizer torch.optim.Adam(model.parameters(), lr0.001)# 训练10个epoch epochs 10 for t in range(epochs):print(fepoch {t1}\n---------------)train(train_dataloader, model, loss_fn, optimizer)# 最终评估 Test(test_dataloader, model, loss_fn)七、关键技术与优化 数据增强通过多种变换增加数据多样性防止过拟合批标准化使用ImageNet统计量进行标准化加速收敛学习率选择使用Adam优化器初始学习率0.001设备选择自动检测并使用GPU加速训练 八、常见问题与解决 内存不足 减小batch size使用更小的图像尺寸 过拟合 增加数据增强添加Dropout层使用L2正则化 训练不收敛 检查学习率检查数据预处理检查模型结构 九、完整代码 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 osdata_transforms { #字典train:transforms.Compose([ #对图片预处理的组合transforms.Resize([300,300]), #对数据进行改变大小transforms.RandomRotation(45), #随机旋转-45到45之间随机选transforms.CenterCrop(256), #从中心开始裁剪[256,256]transforms.RandomHorizontalFlip(p0.5),#随机水平翻转p是指选择一个概率翻转p0.5表示百分之50transforms.RandomVerticalFlip(p0.5),#随机垂直翻转transforms.ColorJitter(brightness0.2,contrast0.1,saturation0.1,hue0.1),transforms.RandomGrayscale(p0.1),#概率转换成灰度率3通道就是RGBtransforms.ToTensor(),#数据转换为tensortransforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])#标准化均值标准差]),valid:transforms.Compose([transforms.Resize([256,256]),transforms.ToTensor(),transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) # 标准化均值标准差]), } #做了数据增强不代表训练效果一定会好只能说大概率会变好 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)print(path_1)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)#Dataset是用来处理数据的 class food_dataset(Dataset): # food_dataset是自己创建的类名称可以改为你需要的名称def __init__(self,file_path,transformNone): #类的初始化解析数据文件txtself.file_path file_pathself.imgs []self.labels []self.transform transformwith open(self.file_path) as f: #是把train.txt文件中的图片路径保存在self.imgssamples [x.strip().split( ) for x in f.readlines()]for img_path,label in samples:self.imgs.append(img_path) #图像的路径self.labels.append(label) #标签还不是tensor# 初始化把图片目录加到selfdef __len__(self): #类实例化对象后可以使用len函数测量对象的个数return len(self.imgs)#training_data[1]def __getitem__(self, idx): #关键可通过索引的形式获取每一个图片的数据及标签image Image.open(self.imgs[idx]) #读取到图片数据还不是tensorBGRif self.transform: #将PIL图像数据转换为tensorimage self.transform(image) #图像处理为256*256转换为tensorlabel self.labels[idx] #label还不是tensorlabel torch.from_numpy(np.array(label,dtypenp.int64)) #label也转换为tensorreturn image,label #training_data包含了本次需要训练的全部数据集 training_data food_dataset(file_pathtrain.txt, transformdata_transforms[train]) test_data food_dataset(file_pathtest.txt, transformdata_transforms[valid])#training_data需要具备索引的功能还要确保数据是tensor train_dataloader DataLoader(training_data,batch_size16,shuffleTrue) test_dataloader DataLoader(test_data,batch_size16,shuffleTrue)判断当前设备是否支持GPU其中mps是苹果m系列芯片的GPU device cuda if torch.cuda.is_available() else mps if torch.backends.mps.is_available() else cpu print(fUsing {device} device) #字符串的格式化CUDA驱动软件的功能pytorch能够去执行cuda的命令 # 神经网络的模型也需要传入到GPU1个batch_size的数据集也需要传入到GPU才可以进行训练 定义神经网络 类的继承这种方式 class CNN(nn.Module): #通过调用类的形式来使用神经网络神经网络的模型nn.mdouledef __init__(self): #输入大小(3,256,256)super(CNN,self).__init__() #初始化父类self.conv1 nn.Sequential( #将多个层组合成一起创建了一个容器将多个网络组合在一起nn.Conv2d( # 2d一般用于图像3d用于视频数据多一个时间维度1d一般用于结构化的序列数据in_channels3, # 图像通道个数1表示灰度图确定了卷积核 组中的个数out_channels16, # 要得到多少个特征图卷积核的个数kernel_size5, # 卷积核大小 3×3stride1, # 步长padding2, # 一般希望卷积核处理后的结果大小与处理前的数据大小相同效果会比较好), # 输出的特征图为(16,256,256)nn.ReLU(), # Relu层不会改变特征图的大小nn.MaxPool2d(kernel_size2), # 进行池化操作(2×2操作),输出结果为(16,128,128))self.conv2 nn.Sequential(nn.Conv2d(16,32,5,1,2), #输出(32,128,128)nn.ReLU(), #Relu层 (32,128,128)nn.MaxPool2d(kernel_size2), #池化层输出结果为(32,64,64))self.conv3 nn.Sequential(nn.Conv2d(32, 64, 5, 1, 2), # 输出(64,64,64)nn.ReLU(), # Relu层 (64,64,64)nn.MaxPool2d(kernel_size2), # 池化层输出结果为(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) # flatten操作结果为(batch_size,32 * 64 * 64)output self.out(x)return output model CNN().to(device) #把刚刚创建的模型传入到GPU print(model)def train(dataloader,model,loss_fn,optimizer):model.train() #告诉模型我要开始训练模型中w进行随机化操作已经更新w在训练过程中w会被修改的 # pytorch提供2种方式来切换训练和测试的模式分别是model.train() 和 mdoel.eval() # 一般用法是在训练开始之前写上model.train(),在测试时写上model.eval()batch_size_num 1for X,y in dataloader: #其中batch为每一个数据的编号X,y X.to(device),y.to(device) #把训练数据集和标签传入cpu或GPUpred model.forward(X) # .forward可以被省略父类种已经对此功能进行了设置loss loss_fn(pred,y) # 通过交叉熵损失函数计算损失值loss# Backpropagation 进来一个batch的数据计算一次梯度更新一次网络optimizer.zero_grad() # 梯度值清零loss.backward() # 反向传播计算得到每个参数的梯度值woptimizer.step() # 根据梯度更新网络w参数loss_value loss.item() # 从tensor数据种提取数据出来tensor获取损失值if batch_size_num %1 0:print(floss: {loss_value:7f} [number:{batch_size_num}])batch_size_num 1def Test(dataloader,model,loss_fn):size len(dataloader.dataset)num_batches len(dataloader) # 打包的数量model.eval() #测试w就不能再更新test_loss,correct 0,0with torch.no_grad(): #一个上下文管理器关闭梯度计算。当你确认不会调用Tensor.backward()的时候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()a (pred.argmax(1) y) #dim1表示每一行中的最大值对应的索引号dim0表示每一列中的最大值对应的索引号b (pred.argmax(1) y).type(torch.float)test_loss / num_batches #能来衡量模型测试的好坏correct / size #平均的正确率print(fTest result: \n Accuracy:{(100*correct)}%, Avg loss:{test_loss})loss_fn nn.CrossEntropyLoss() #创建交叉熵损失函数对象因为手写字识别一共有十种数字输出会有10个结果 # optimizer torch.optim.Adam(model.parameters(),lr0.001) #创建一个优化器SGD为随机梯度下降算法 # # params要训练的参数一般我们传入的都是model.parameters() # # lr:learning_rate学习率也就是步长 # # # loss表示模型训练后的输出结果与样本标签的差距。如果差距越小就表示模型训练越好越逼近真实的模型 train(train_dataloader,model,loss_fn,optimizer) #训练1次完整的数据。多轮训练 Test(test_dataloader,model,loss_fn)epochs 10 for t in range(epochs):print(fepoch {t1}\n---------------)train(train_dataloader,model,loss_fn,optimizer) print(Done!) Test(test_dataloader,model,loss_fn)十、总结 本文详细介绍了使用PyTorch实现食物分类的全流程。通过合理的网络设计、数据增强和训练策略我们能够构建一个有效的分类系统。读者可以根据实际需求调整网络结构、超参数和数据增强策略以获得更好的性能。 完整代码已在上文展示建议在实际应用中根据具体数据集调整相关参数。希望本文能帮助读者掌握PyTorch图像分类的基本流程和方法。
http://www.dnsts.com.cn/news/174734.html

相关文章:

  • 手机网站logoios软件开发需要学什么
  • 加强网站网络安全建设方案wordpress旅游网站主题
  • 网站策划岗位职责个人域名可以做公司网站么
  • 关于网站制作如何运用网站模板
  • wordpress 百度统计抖音搜索seo排名优化
  • 宁波论坛网站哪个最好如何做专题网站
  • 珠海网站建设 金碟苏州建网站的公司哪家口碑好
  • 成都网站建设 木木科技企业网站设计的基本原则有哪些
  • 北京网站建设公司拟做h5哪些网站好 知乎
  • 网站建设市场介绍商城网站设计实训总结
  • 网站建设管理方案网页微博怎么回到旧版
  • 麻涌镇网站建设如何开发网站建设业务
  • 规划建立一个网站 项目电子商务网站建设与管理 项目任务 教材
  • 电子商务网站建设定义工厂招工最新招聘信息
  • 大沥网站建设公司asp网站可运行jsp吗
  • 网站聚合页面沧州网络营销网络宣传业务
  • 我们做网站 出教材 办育心经建设互联网站
  • 局域网如何做网站亚马逊电商平台官网
  • 国外有什么网站是做服装的中国备案查询网站
  • 北京注册公司核名网站邢台建站
  • 个性个人网站模板那家财经网站做的好
  • 青岛做门户网站公司如何登陆网站服务器
  • WaP网站模块遵义网红打卡
  • 用wordpress建站一定要先有域名和空间吗wordpress移动端编辑器
  • 网站后台不显示验证码go语言怎么搭建网页
  • 高端酒店网站模板广州专业找人后付款的
  • 能赚钱的网站做网站都需要买什么软件
  • 做音乐网站代码网络空间安全专业大学排名
  • 上海网站设计开发公司基地网站建设方案
  • 衡水武邑县建设局网站北京网站建设亿玛酷出名5