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

文明网i中国精神文明建设门户网站荆州哪个公司做网站

文明网i中国精神文明建设门户网站,荆州哪个公司做网站,商标设计免费的app,山西太原小店区最新消息AlexNet示例代码与解析 1、前言2、模型tips3、模型架构4、模型代码backbonetrainpredict 5、模型训练6、导出onnx模型 1、前言 AlexNet由Hinton和他的学生Alex Krizhevsky设计#xff0c;模型名字来源于论文第一作者的姓名Alex。该模型以很大的优势获得了2012年ISLVRC竞赛的冠… AlexNet示例代码与解析 1、前言2、模型tips3、模型架构4、模型代码backbonetrainpredict 5、模型训练6、导出onnx模型 1、前言 AlexNet由Hinton和他的学生Alex Krizhevsky设计模型名字来源于论文第一作者的姓名Alex。该模型以很大的优势获得了2012年ISLVRC竞赛的冠军网络分类准确率由传统的 70%提升到 80%自那年之后深度学习开始迅速发展。 ImageNet是一个在2009年创建的图像数据集从2010年开始到2017年举办了七届的ImageNet 挑战赛——ImageNet Large Scale Visual Recognition ChallengeI (LSVRC)在这个挑战赛上诞生了AlexNet、ZFNet、OverFeat、VGG、Inception、ResNet、WideResNet、FractalNet、DenseNet、ResNeXt、DPN、SENet 等经典模型。 摘录CNN经典网络模型二AlexNet简介及代码实现PyTorch超详细注释版 2、模型tips 使用了多GPU训练当时的硬件资源有限一块显卡的显存并不能满足AlexNet的训练因此作者将其分成了两部分每一块显卡负责一部分的特征图最后在全连接层的时候将每块显卡提取的特征拼接成一个当时使用了分组卷积来完成这个需求后来证实了分组卷积能够达到普通卷积的精度。使用了ReLu作为激活函数来训练模型。使用了局部响应归一化来对网络层进行归一化目的是抑制反馈较小的神经元的值增大反馈明显的神经元的值。在VGG的论文中指出LRN并灭有什么明显的效果新的深度学习网络中已使用其他归一化方法来代替LRN)。使用了覆盖池化覆盖池化的意思即当池化的步长小于池化核时相邻的池化核之间会互相重叠。论文中指出这种池化方式可以缓解过拟合。使用了dropout来缓解过拟合。dropout即在训练的过程中随机的让一些隐层中的节点置为0在本轮训练中不参与前向传播与反向传播因此在每一轮训练的时候模型都会随机的得到一个与上一论训练中不太一样的网络架构这样的做法可以降低神经元之间的依赖性耦合性使每个神经元能够在一次次的训练中学习到更为可靠的特征。尽管dropout会降低训练收敛的速度但是可以有效的缓解过拟合程度。 3、模型架构 4、模型代码 我们将使用开源的深度学习框架PyTorch来搭建并训练我们的模型 backbone import torch import torchvision from torch import nnclass AlexNet(nn.Module):def __init__(self):super(AlexNet, self).__init__()#特征提取层self.CONV nn.Sequential(nn.Conv2d(3, 96, 11, 4, 2), # 1 * 224 * 224 * 3 --- 1 * 55 * 55 * 96nn.ReLU(),nn.MaxPool2d(3, 2), # 1 * 55 * 55 * 96 --- 1 * 27 * 27 * 96nn.Conv2d(96, 256, 5, 1, 2), # 1 * 27 * 27 * 96 --- 1 * 27 * 27 * 256nn.ReLU(),nn.MaxPool2d(3, 2), # 1 * 27 * 27 * 256 --- 1 * 13 * 13 * 256nn.Conv2d(256, 384, 3, 1, 1), # 1 * 13 * 13 * 256 --- 1 * 13 * 13 * 384nn.ReLU(),nn.Conv2d(384, 384, 3, 1, 1), # 1 * 13 * 13 * 384--- 1 * 13 * 13 * 384nn.ReLU(),nn.Conv2d(384, 256, 3, 1, 1), # 1 * 13 * 13 * 384 --- 1 * 13 * 13 * 256nn.ReLU(),nn.MaxPool2d(3, 2), # 1 * 13 * 13 * 256 --- 1 * 6 * 6 * 256)#将多维的张量进行平坦化处理#默认从第一个维度到最后一个维度拼接self.flatten nn.Flatten() # 1 * 6 * 6 * 256 --- 1 * 9216#全连接层self.FC nn.Sequential(# 全连接层1nn.Linear(in_features6 * 6 * 256, out_features4096),nn.ReLU(),nn.Dropout(0.5),# 全连接层2nn.Linear(in_features4096, out_features4096),nn.ReLU(),nn.Dropout(0.5),# 全连接层3nn.Linear(in_features4096, out_features1000),nn.Dropout(0.5),# 全连接层4 分类层几分类就是降维到几nn.Linear(in_features1000, out_features10),)def forward(self, x):x self.CONV(x)x self.flatten(x)x self.FC(x)return xif __name__ __main__:x torch.randn([1,3,224,224])model AlexNet()y model(x)print(x)注意这里的输入是224 * 224的宽高有的输入是227 * 227的宽高可以根据不同的输入来计算对应的卷积与池化的参数对最终的结果几乎没有影响。 搭建模型时用到的torch库的api nn.Sequential() 可以允许将整个容器视为单个模块即相当于把多个模块封装成一个模块forward()方法接收输入之后nn.Sequential()按照内部模块的顺序自动依次计算并输出结果。 nn.Conv2d()in_channelout_channelkernel_sizestridepadding。 nn.ReLu()ReLu激活函数。 nn.MaxPool2dkernel_sizestride。 nn.Flatten()将张量扁平化处理默认从第一个维度到最后一个维度的所有信息进行一维处理。start_dim1end_dim-1。 nn.Linear()线性层或者叫全连接层。in_featuresout_featuresis_bias(bool)。 nn.Dropout()dropout方法随机失活神经元节点。p失活节点的占比in_place是否改变输入数据dropout只在训练阶段开启在推理阶段不开启。 train import torch import torch.nn as nn from AlexNet import AlexNet from torch.optim import lr_scheduler from torchvision import transforms from torchvision import datasets from torch.utils.data import DataLoader import os import matplotlib.pyplot as plt# 解决中文显示问题 # 运行配置参数中的字体font为黑体SimHei plt.rcParams[font.sans-serif] [simHei] # 运行配置参数总的轴axes正常显示正负号minus plt.rcParams[axes.unicode_minus] Falsedevice torch.device(cuda if torch.cuda.is_available() else cpu)ROOT_TRAIN dataset ROOT_TEST datasetnormalize transforms.Normalize([0.5, 0.5, 0.5],[0.5, 0.5, 0.5] )train_transform transforms.Compose([transforms.Resize((224, 224)),#以0.5的概率来竖直翻转给定的PIL图像transforms.RandomVerticalFlip(),transforms.ToTensor(),normalize, ])val_transform transforms.Compose([transforms.Resize((224,224)),transforms.ToTensor(),normalize, ])#加载训练数据集 train_datasets datasets.ImageFolder(ROOT_TRAIN, transformtrain_transform) train_dataloader DataLoader(train_datasets, batch_size32, shuffleTrue)val_datasets datasets.ImageFolder(ROOT_TEST, transformval_transform) val_dataloader DataLoader(val_datasets, batch_size32, shuffleTrue)#实例化模型对象 model AlexNet().to(device)#定义交叉熵损失函数 loss_fn nn.CrossEntropyLoss()#定义优化器 optimizer_ torch.optim.SGD(model.parameters(), lr0.01, momentum0.9)#学习率每十轮降低为之前的0.5 lr_scheduler lr_scheduler.StepLR(optimizer_, step_size10, gamma0.5)#定义训练函数 def train(dataloader, model, loss_fn, optimizer):loss, current, n 0.0, 0.0, 0.0#batch为索引 x和y分别是图片和类别for batch, (x, y) in enumerate(dataloader):#前向传播image, y x.to(device), y.to(device)output model(image)curr_loss loss_fn(output, y)_, pred torch.max(output, dim1)#计算每个批次的准确率curr_acc torch.sum(y pred)/output.shape[0]#反向传播#清空之前的梯度optimizer.zero_grad()#计算当前的梯度curr_loss.backward()#根据梯度更新网络参数optimizer.step()#损失叠加loss curr_loss.item()#精度叠加current curr_acc.item()n n 1#训练的平均损失和平均精度train_loss loss / ntrain_acc current / nprint(train loss str(train_loss))print(train accuracy str(train_acc))return train_loss, train_acc#定义验证函数 def val(dataloader, model, loss_fn):loss, current, n 0.0, 0.0, 0.0#eval()如果模型中存在BN和dropout则不启用以防改变权值model.eval()with torch.no_grad():for batch, (x, y) in enumerate(dataloader):#前向传播image, y x.to(device), y.to(device)output model(image)curr_loss loss_fn(output, y)_, pred torch.max(output, dim1)curr_acc torch.sum(y pred) / output.shape[0]loss curr_loss.item()current curr_acc.item()n n 1val_loss loss / nval_acc current / nprint(val loss str(val_loss))print(val accuracy str(val_acc))return val_loss, val_acc#定义画图函数 def plot_loss(train_loss, val_loss):plt.plot(train_loss, labeltrain loss)plt.plot(val_loss, labelval loss)plt.legend(locbest)plt.xlabel(loss)plt.ylabel(epoch)plt.title(训练集和验证集的loss值对比图)plt.show()def plot_acc(train_acc, val_acc):plt.plot(train_acc, labeltrain acc)plt.plot(val_acc, labelval acc)plt.legend(locbest)plt.xlabel(acc)plt.ylabel(epoch)plt.title(训练集和验证集的acc值对比图)plt.show()#开始训练 loss_train [] acc_train [] loss_val [] acc_val []#训练次数 epoch 200 #用于判断什么时候保存模型 min_acc 0 for t in range(epoch):# lr_scheduler.step()print(fepoch{t1}-------------------------------)#训练模型train_loss, train_acc train(train_dataloader, model, loss_fn, optimizer_)#验证模型val_loss, val_acc val(val_dataloader, model, loss_fn)print(\n)loss_train.append(train_loss)acc_train.append(train_acc)loss_val.append(val_loss)acc_val.append(val_acc)folder save_model# 保存最好的模型权重if val_acc min_acc:if not os.path.exists(folder):os.mkdir(folder)min_acc val_acctorch.save(model.state_dict(), f{folder}/model_best.pth)if t epoch - 1:torch.save(model.state_dict(), f{folder}/model_last.pth)print(训练完毕\n fbest pth saved as {folder}/model_best.pth\n flast pth saved as {folder}/model_last.pth\n)plot_loss(loss_train, loss_val) plot_acc(acc_train, acc_val)predict import torch from AlexNet import AlexNet from torch.autograd import Variable from torchvision import transforms from torchvision.transforms import ToPILImage from torchvision.datasets import ImageFolder from torch.utils.data import DataLoader# ROOT_TRAIN D:/pycharm/AlexNet/data/train ROOT_TEST dataset# 将图像的像素值归一化到[-1,1]之间 normalize transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])val_transform transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),normalize ])# 加载训练数据集 val_dataset ImageFolder(ROOT_TEST, transformval_transform)# 如果有NVIDA显卡转到GPU训练否则用CPU device cuda if torch.cuda.is_available() else cpu# 模型实例化将模型转到device model AlexNet().to(device)# 加载train.py里训练好的模型 model.load_state_dict(torch.load(rsave_model/model_best.pth))# 结果类型 classes [cat,dog ]# 把Tensor转化为图片方便可视化 show ToPILImage()# 进入验证阶段 model.eval() for i in range(10):x, y val_dataset[i][0], val_dataset[i][1]# show()显示图片show(x).show()# torch.unsqueeze(input, dim)input(Tensor)输入张量dim (int)插入维度的索引最终扩展张量维度为4维x Variable(torch.unsqueeze(x, dim0).float(), requires_gradFalse).to(device)with torch.no_grad():pred model(x)# argmax(input)返回指定维度最大值的序号# 得到预测类别中最高的那一类再把最高的这一类对应classes中的那一类predicted, actual classes[torch.argmax(pred[0])], classes[y]# 输出预测值与真实值print(fpredicted:{predicted}, actual:{actual}) 5、模型训练 猫狗训练集训练二分类模型生成pth模型。 6、导出onnx模型 from AlexNet import AlexNet import torch import onnx import osdef export_onnx(pt_path:str, onnx_path:str):model AlexNet()model.load_state_dict(torch.load(pt_path))dummy_inputs {input: torch.randn(1, 3, 224, 224, dtypetorch.float),}output_names {classes}if not os.path.exists(os.path.dirname(onnx_path)):os.makedirs(os.path.dirname(onnx_path))with open(onnx_path, wb) as f:print(fExporting onnx model to {onnx_path}...)torch.onnx.export(model,tuple(dummy_inputs.values()),f,export_paramsTrue,verboseFalse,opset_version17,do_constant_foldingTrue,input_nameslist(dummy_inputs.keys()),output_namesoutput_names,# dynamic_axesdynamic_axes,)if __name__ __main__:pt_path save_model/model_best.pthonnx_path save_model/model_best.onnxexport_onnx(pt_path, onnx_path)onnx模型可视化架构图
http://www.zqtcl.cn/news/337821/

相关文章:

  • 河南网站备案系统短信广州注册公司程序
  • 苏晋建设集团网站跨专业的简历怎么制作
  • 交互网站怎么做设计师作品网站
  • 国外网站的分析工具有哪些办公室装修计入什么会计科目
  • 手机网站 需求模板3000元建设个人网站
  • 请人做网站域名和主机thinkphp网站开发实战教程
  • 做地产网站哪家好饮料网站建设价格
  • 外管局网站 报告怎么做wordpress 阿里
  • 湘潭做网站 去磐石网络山西自助建站费用低
  • 温州哪里做网站比较好昆明网页制作开发
  • 网站建设淘宝客网站建设与网页设计入门
  • 网站推广营销联系方式俄语免费网站制作
  • 广东企业网站seo点击软件搭建本地网站
  • 商丘做网站的价格专业网站制作哪家强
  • 瑞安微信网站软件公司网站设计与制作
  • 片头网站网站建设服装在线商城实训报告
  • wordpress做企业网站怎样做网页推广
  • 网站建设售后服务安全维护企业网站开发 外文文献
  • 网站设计英文翻译系统开发的五个阶段
  • 成华区门户网站拍卖网站开发多少钱
  • html设计网站wordpress 评论增加字段
  • 搭建正规网站小程序开发难不难
  • 做静态网站用什么软件自己编写代码建设微网站
  • 备案网站ipoa系统主要干什么的
  • 杭州专业网站建设在哪里wordpress主题重置
  • 仿wordpress站赣州专业网站推广
  • 网站开发需要多长时间python链接wordpress
  • 网上交易网邯郸网站seo
  • wordpress图片后加载外链seo服务
  • 婚庆公司网站建设腾讯广告建站工具