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

比较好的室内设计网站东莞市做网络维护的公司

比较好的室内设计网站,东莞市做网络维护的公司,网络推广培训学院,鹤壁市城乡一体化示范区官网入口文章目录 1. 完整模型的训练套路1.2 导入必要的包1.3 准备数据集1.3.1 使用公开数据集#xff1a;1.3.2 获取训练集、测试集长度#xff1a;1.3.3 利用 DataLoader来加载数据集 1.4 搭建神经网络1.4.1 测试搭建的模型1.4.2 创建用于训练的模型 1.5 定义损失函数和优化器1.6 使… 文章目录 1. 完整模型的训练套路1.2 导入必要的包1.3 准备数据集1.3.1 使用公开数据集1.3.2 获取训练集、测试集长度1.3.3 利用 DataLoader来加载数据集 1.4 搭建神经网络1.4.1 测试搭建的模型1.4.2 创建用于训练的模型 1.5 定义损失函数和优化器1.6 使用tensorboard非必要1.7 定义早停策略等参数1.8 训练模型1.8.1 通过训练得到best_model 1.9 验证模型1.9.1标签数据1.9.2 开始验证模型导入必要的包读取图片网上随便找的转换图像维度:加载best_model开始用模型预测 1.10 扩展知识1.10.1 使用GPU加速的方法1.10.2 使用早停策略1.10.3 两种保存模型的方法导包两种保存模型方式两种读取模型方式 完整代码获取方式 1. 完整模型的训练套路 任务给图片做分类飞机、鸟、狗、猫。。等共十种标签 ps针对不同任务只是在数据处理和模型搭建上有所不同而已模型的训练流程套路都是一样的。 1.2 导入必要的包 import torchvision from torch import nn import torch1.3 准备数据集 1.3.1 使用公开数据集 # 准备数据集 train_data torchvision.datasets.CIFAR10(root../data,trainTrue,transformtorchvision.transforms.ToTensor(),downloadTrue) test_data torchvision.datasets.CIFAR10(root../data,trainFalse,transformtorchvision.transforms.ToTensor(),downloadTrue)1.3.2 获取训练集、测试集长度 # length长度 train_data_size len(train_data) test_data_size len(test_data)print(训练数据集的长度为{}.format(train_data_size)) print(测试数据集的长度为{}.format(test_data_size))1.3.3 利用 DataLoader来加载数据集 # 利用 DataLoader来加载数据集 from torch.utils.data import DataLoader train_dataloader DataLoader(train_data,batch_size64) test_dataloader DataLoader(test_data,batch_size64)1.4 搭建神经网络 # 搭建神经网络 class MyModel(nn.Module):def __init__(self):super(MyModel,self).__init__()self.model nn.Sequential(nn.Conv2d(3,32,5,1,2),nn.MaxPool2d(2),nn.Conv2d(32,32,5,1,2),nn.MaxPool2d(2),nn.Conv2d(32,64,5,1,2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(64*4*4,64),nn.Linear(64,10))def forward(self,x):x self.model(x)return x1.4.1 测试搭建的模型 # 测试搭建的模型 model1 MyModel() input torch.ones((64,3,32,32)) output model1(input) print(output.shape) #torch.Size([64, 10])1.4.2 创建用于训练的模型 # 定义是否使用gpu加速的设备 # 支持gpu加速的pytorch版本device cuda:0,否则为cpu device torch.device(cuda:0 if torch.cuda.is_available() else cpu) print(device) # cuda:0# 创建模型 model MyModel() # model.to(device) # 模型和损失函数不需要另外复制 model model.to(device)1.5 定义损失函数和优化器 # 损失函数 loss_fn nn.CrossEntropyLoss() # 交叉熵现在常用mse loss_fn.to(device)learning_rate 1e-2 # learning_rate 0.01 # 优化器 optimizer torch.optim.SGD(model.parameters(),lrlearning_rate) #SGD现在常用Adam1.6 使用tensorboard非必要 # 使用tensorboard from torch.utils.tensorboard.writer import SummaryWriter # 添加tensorbord writer SummaryWriter(../logs_train)import time import numpy as np1.7 定义早停策略等参数 # 定义 Early Stopping 参数 early_stopping_patience 3 # 如果 3 个 epoch 后性能没有改善就停止训练 early_stopping_counter 0 best_loss float(inf) # 初始化为无穷大 # 初始化最好模型的性能为无穷大 best_valid_loss float(inf)# 初始化好的准确率 best_accuracy 0.001.8 训练模型 # 设置训练网络的一些参数# 记录测试的次数 total_test_step 0# 训练的次数 epoch 100start_time time.time() for i in range(epoch):print(----------------第{}轮训练开始----------------.format(i1))# 训练步骤开始model.train() #训练模式对DropOut等有用train_loss []# 记录训练的次数iter_count 0for data in train_dataloader:imgs,targets dataimgs imgs.to(device)targets targets.to(device)outputs model(imgs) # 调用模型计算输出值loss loss_fn(outputs,targets) # 计算损失值train_loss.append(loss.item())# 优化器优化模型optimizer.zero_grad() # 梯度清零loss.backward() # 反向传播optimizer.step() # 优化参数iter_count iter_count 1 # 迭代次数if (iter_count %100 0):end_time time.time() # print(cost_time:,end_time-start_time)print(训练次数{0}Loss:{1:.7f}.format(iter_count,loss.item()))writer.add_scalar(train_loss:,loss.item(),iter_count)train_loss np.average(train_loss)print(第{0}轮训练结束.format(i1))print(Epoch:{0} | Train_Loss:{1:.7f}\n.format(i1,train_loss))# 测试步骤开始model.eval()# 测试模式print(第{0}轮测试开始.format(i1))test_loss []test_accuracy 0with torch.no_grad(): # 不计算梯度for data in test_dataloader:imgs,targets dataimgs imgs.to(device)targets targets.to(device)outputs model(imgs)loss loss_fn(outputs,targets)test_loss.append(loss.item())accuracy (outputs.argmax(1) targets).sum()test_accuracy test_accuracyaccuracytest_loss np.average(test_loss)print(Epoch:{0} | Test_Loss:{1:.7f}.format(i1,test_loss))test_accuracy test_accuracy/test_data_sizeprint(Test_Accuracy:{0:.7f}.format(test_accuracy))writer.add_scalar(test_loss:,test_loss,total_test_step )writer.add_scalar(test_accuracy:,test_accuracy,total_test_step )total_test_step total_test_step 1# 每一轮保存模型# torch.save(model,model_{}.pth.format(i1))# torch.save(model.state_dict(),model_{}.pth.format(i)) # 官方推荐的保存模型方法# # 如果当前模型在验证集上的性能更好保存该模型 (以Loss为标准)# if test_loss best_valid_loss: # best_valid_loss test_loss # torch.save(model.state_dict(), ./model/best_model.pth)# print(当前第{}轮模型为best_model,已保存!.format(i1))# 以正确率为标准if best_accuracy test_accuracy: best_accuracy test_accuracy torch.save(model.state_dict(), ./model/ac_{0:.4f}_best_model.pth.format(best_accuracy))print(当前第{}轮模型为best_model,已保存!.format(i1))early_stopping_counter 0 #只要模型有更新早停patience就初始化为0else: #早停策略early_stopping_counter 1 if early_stopping_counter early_stopping_patience: print(Early stopping at epoch {}.format(i1)) breakprint(\n)writer.close()训练过程展示只给出两轮的信息 ​ … 1.8.1 通过训练得到best_model 我自得到的best_model :ac_0.6553_best_model.pth 准确率0.65还行练手的项目就不一一调参多次训练了 1.9 验证模型 1.9.1标签数据 1.9.2 开始验证模型 导入必要的包 from PIL import Image import torchvision import torch读取图片网上随便找的 图1-dog1 图2-dog2 ​ image_path ./data/dog2.png image Image.open(image_path) image image.convert(RGB)转换图像维度: transform torchvision.transforms.Compose([torchvision.transforms.Resize((32,32)),torchvision.transforms.ToTensor()]) image transform(image) print(image.shape) #torch.Size([3, 32, 32]) 加载best_model 神经网络类 from torch import nn class MyModel(nn.Module):def __init__(self):super(MyModel,self).__init__()self.model nn.Sequential(nn.Conv2d(3,32,5,1,2),nn.MaxPool2d(2),nn.Conv2d(32,32,5,1,2),nn.MaxPool2d(2),nn.Conv2d(32,64,5,1,2),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(64*4*4,64),nn.Linear(64,10))def forward(self,x):x self.model(x)return x 因为我保存模型用了state_dict()这样的模型小省空间所以加载模型需要以下这样加载下文会给出保存模型的两种方法 best_model MyModel() best_model.load_state_dict(torch.load(./best_model/ac_0.6553_best_model.pth)) print(best_model)输出: MyModel((model): Sequential((0): Conv2d(3, 32, kernel_size(5, 5), stride(1, 1), padding(2, 2))(1): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(2): Conv2d(32, 32, kernel_size(5, 5), stride(1, 1), padding(2, 2))(3): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(4): Conv2d(32, 64, kernel_size(5, 5), stride(1, 1), padding(2, 2))(5): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(6): Flatten(start_dim1, end_dim-1)(7): Linear(in_features1024, out_features64, biasTrue)(8): Linear(in_features64, out_features10, biasTrue)) )开始用模型预测 再转换一下图片维度 image torch.reshape(image,(1,3,32,32))best_model.eval() with torch.no_grad():output best_model(image) print(output) print(output.argmax(1)) # 取出预测最大概率的值输出结果由结果可知预测的十个标签中从0开始第5个结果的值最大查看标签数据知序号5为dog预测成功了 ps我得到的这个模型把图片dog1预测成了猫 tensor([[ -3.7735, -9.3045, 6.1250, 2.3422, 4.8322, 11.0666, -2.2375,7.5186, -11.7261, -8.5249]]) tensor([5])1.10 扩展知识 1.10.1 使用GPU加速的方法 GPU训练 网络模型数据输入、标注损失函数.cuda # 使用GPU训练 import torch device torch.device(cuda:0 if torch.cuda.is_available() else cpu) # 将模型移动到 GPU model model.to(device) # 将损失函数移动到 GPU loss_fn loss_fn.to(device)# 将输入数据移动到 GPU inputs inputs.to(device) # 将标签移动到 GPU labels labels.to(device) # 命令行的方式查看显卡配置在jupyter上 !nvidia-smi1.10.2 使用早停策略 # 使用早停策略 import torch import torch.nn as nn from torch.optim import Adam from torch.utils.data import DataLoader, TensorDataset # 定义一个简单的模型 class SimpleModel(nn.Module): def __init__(self, input_dim, output_dim): super(SimpleModel, self).__init__() self.linear nn.Linear(input_dim, output_dim) def forward(self, x): return self.linear(x) # 创建数据 input_dim 10 output_dim 1 x_train torch.randn(100, input_dim) y_train torch.randn(100, output_dim) dataset TensorDataset(x_train, y_train) dataloader DataLoader(dataset, batch_size10) # 初始化模型、损失函数和优化器 model SimpleModel(input_dim, output_dim) criterion nn.MSELoss() optimizer Adam(model.parameters(), lr0.01) # 定义 Early Stopping 参数 early_stopping_patience 5 # 如果 5 个 epoch 后性能没有改善就停止训练 early_stopping_counter 0 best_loss float(inf) # 初始化为无穷大 # 训练循环 for epoch in range(100): # 例如我们训练 100 个 epoch for inputs, targets in dataloader: optimizer.zero_grad() outputs model(inputs) loss criterion(outputs, targets) loss.backward() optimizer.step() # 计算当前 epoch 的损失 current_loss 0 with torch.no_grad(): for inputs, targets in dataloader: outputs model(inputs) current_loss criterion(outputs, targets).item() / len(dataloader) current_loss / len(dataloader) # 检查是否应提前停止训练 if current_loss best_loss: best_loss current_loss early_stopping_counter 0 else: early_stopping_counter 1 if early_stopping_counter early_stopping_patience: print(Early stopping at epoch {}.format(epoch)) break1.10.3 两种保存模型的方法 导包 import torch import torchvision 两种保存模型方式 vgg16 torchvision.models.vgg16(weightsNone)# 保存方式1模型结构参数结构 torch.save(vgg16,vgg16_method1.pth)# 保存方式2模型参数官方推荐模型较小 torch.save(vgg16.state_dict(),vgg16_method2.pth)两种读取模型方式 # 方式1 model1 torch.load(vgg16_method1.pth) # model1# 方式2 model2 torch.load(vgg16_method2.pth) # model2 # 参数结构# 将方式2 恢复成模型结构 vgg16 torchvision.models.vgg16(weightsNone) vgg16.load_state_dict(torch.load(vgg16_method2.pth))print(vgg16)输出结果 VGG((features): Sequential((0): Conv2d(3, 64, kernel_size(3, 3), stride(1, 1), padding(1, 1))(1): ReLU(inplaceTrue)(2): Conv2d(64, 64, kernel_size(3, 3), stride(1, 1), padding(1, 1))(3): ReLU(inplaceTrue)(4): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(5): Conv2d(64, 128, kernel_size(3, 3), stride(1, 1), padding(1, 1))(6): ReLU(inplaceTrue)(7): Conv2d(128, 128, kernel_size(3, 3), stride(1, 1), padding(1, 1))(8): ReLU(inplaceTrue)(9): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(10): Conv2d(128, 256, kernel_size(3, 3), stride(1, 1), padding(1, 1))(11): ReLU(inplaceTrue)(12): Conv2d(256, 256, kernel_size(3, 3), stride(1, 1), padding(1, 1))(13): ReLU(inplaceTrue)(14): Conv2d(256, 256, kernel_size(3, 3), stride(1, 1), padding(1, 1))(15): ReLU(inplaceTrue)(16): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(17): Conv2d(256, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1))(18): ReLU(inplaceTrue)(19): Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1))(20): ReLU(inplaceTrue)(21): Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1))(22): ReLU(inplaceTrue)(23): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse)(24): Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1))(25): ReLU(inplaceTrue)(26): Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1))(27): ReLU(inplaceTrue)(28): Conv2d(512, 512, kernel_size(3, 3), stride(1, 1), padding(1, 1))(29): ReLU(inplaceTrue)(30): MaxPool2d(kernel_size2, stride2, padding0, dilation1, ceil_modeFalse))(avgpool): AdaptiveAvgPool2d(output_size(7, 7))(classifier): Sequential((0): Linear(in_features25088, out_features4096, biasTrue)(1): ReLU(inplaceTrue)(2): Dropout(p0.5, inplaceFalse)(3): Linear(in_features4096, out_features4096, biasTrue)(4): ReLU(inplaceTrue)(5): Dropout(p0.5, inplaceFalse)(6): Linear(in_features4096, out_features1000, biasTrue)) )完整代码获取方式 点赞、收藏、加关注 加我vxls888726
http://www.dnsts.com.cn/news/235754.html

相关文章:

  • 网站到期续费通知谷歌seo网站怎么做产品分类
  • 公司销售网站怎么做wordpress divi 教程
  • jquery网站模板下载西安公司网站如何建设
  • 电商网站建设方案邢台网络招聘
  • 企业网站模板下载网站模板下载仿牌外贸网站推广
  • 新工商名录长沙seo网络推广
  • 网站商城支付宝开通怎么做展厅设计方案
  • 合肥网站seo公司建筑网络计划图中tp是什么意思
  • 哪个着陆页网站网站建设维护专员
  • 网站建设 6万贵不贵虚拟主机只能静态网站
  • 二级网站怎样做排名综合门户网站源码
  • 专注苏州网站建设做音乐网站要求
  • 做外贸网站注意wordpress收起边栏
  • 心理咨询 网站模版网络棋牌游戏
  • 建站行业突破家装网站建设多少钱
  • 平武移动网站建设北京手机网站设计报价
  • 济南网络推广公司电话优化方案官网
  • 网站添加验证码两个男生如何做网站
  • 百度收录收费 重大网站qq推广的方式有哪几种
  • 承接app网站开发的广告网站标题怎么做
  • 完成职教集团网站建设天津网站建设制作开发公司
  • 免费建设自己的网站互动模板wordpress
  • vps新建的网站打不开西安建筑网站建设
  • 微信公众平台制作网站珠海最新消息今天
  • 产品互联网做推广做什么网站好企业咨询管理收费标准
  • 黄金外汇网站建设南京软件定制
  • 国外网站访问速度慢如何办个网站
  • 旅游攻略那个网站做的好企业网站 优帮云
  • 计算机等级培训机构百度推广优化中心
  • 生成图片的网站68Design一样设计网站