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

如何网上开店卖东西宁波正规优化seo价格

如何网上开店卖东西,宁波正规优化seo价格,网站建设与维护要求,网站源代码编辑1.VGG简介 论文下载地址#xff1a;https://arxiv.org/pdf/1409.1556.pdf VGGNet 是由牛津大学视觉几何小组#xff08;Visual Geometry Group, VGG#xff09;提出的一种深层卷积网络结构#xff0c;他们以 7.32% 的错误率赢得了 2014 年 ILSVRC 分类任务的亚军#xff…1.VGG简介 论文下载地址https://arxiv.org/pdf/1409.1556.pdf  VGGNet 是由牛津大学视觉几何小组Visual Geometry Group, VGG提出的一种深层卷积网络结构他们以 7.32% 的错误率赢得了 2014 年 ILSVRC 分类任务的亚军冠军由 GoogLeNet 以 6.65% 的错误率夺得和 25.32% 的错误率夺得定位任务Localization的第一名GoogLeNet 错误率为 26.44%。  VGG通过vgg块的堆积VGG19最高让网络达到了16 个卷积层和 3 个全连接层共计 19 层网络池化层不带参数一般不算一层。这也导致参数量非常的多模型比较臃肿第一个全连接层占了非常大一部分 包括VGG11VGG13VGG16和VGG19性能依次提升最常用的是VGG16。 核心点 全部使用3×3步长为1的小卷积核。3×3卷积核是最小的能够表示上下左右中心的尺寸。 假设输入为5×5使用2次3×3卷积后最终得到1×1的特征图那么这个1×1的特征图的感受野为5×5。这和直接使用一个5×5卷积核得到1×1的特征图是一样的。也就是说2次3×3卷积可以代替一次5×5卷积同时2次3×3卷积的参数更少2×3×3185×525而且会经过两次激活函数进行非线性变换学习能力会更好。同样的3次3×3卷积可以替代一次7×7的卷积。 此外步长为1可以不会丢失信息 2.相同的vgg块堆叠 3.深度深且成功证明深度增加可以提高网络性能 2.VGG网络结构详解 这里以最常用的VGG16为例子。VGG11VGG13VGG19都是根据上面的表使用不同的卷积个数。 vgg_block包括若干个3×3卷积padding1stride1激活2×2池化padding0stride2,第一个卷积将通道数翻倍 3×3卷积padding1stride1output(input-32×1)/11input特征图尺寸不变2×2池化padding0stride2output(input-2)/211/2input特征图尺寸减半 1.输入层。224×224×3RGB图 2.vgg_block1 操作填充步长输入通道数输出通道数输出特征图尺寸3×3卷积11364224×224Relu激活//6464224×2243×3卷积116464224×224Relu激活//6464224×2242×2最大池化026464112×112 2.vgg_block2 操作填充步长输入通道数输出通道数输出特征图尺寸3×3卷积1164128112×112Relu激活//128128112×1123×3卷积11128128112×112Relu激活//128128112×1122×2最大池化0212812856×56 3.vgg_block3 从这个块开始卷积变成3次 操作填充步长输入通道数输出通道数输出特征图尺寸3×3卷积1112825656×56Relu激活//25625656×563×3卷积1125625656×56Relu激活//25625656×563×3卷积1125625656×56Relu激活//25625656×562×2最大池化0225625628×28 4.vgg_block4 操作填充步长输入通道数输出通道数输出特征图尺寸3×3卷积1125651228×28Relu激活//51251228×283×3卷积1151251228×28Relu激活//51251228×283×3卷积1151251228×28Relu激活//51251228×282×2最大池化0251251214×14 4.vgg_block5 操作填充步长输入通道数输出通道数输出特征图尺寸3×3卷积1151251214×14Relu激活//51251214×143×3卷积1151251214×14Relu激活//51251214×143×3卷积1151251214×14Relu激活//51251214×142×2最大池化025125127×7 6.向量化 flatten7×7×512(25,088) - 1×1×25,088 7.全连接FC1 1×1×25,088 -1×1×4096 8.全连接FC2 1×1×4096 - 1×1×4096 9.全连接FC3Softmax 1×1×4096 - 1×1×1000 3.VGGPytorch实现 3.1 手动实现VGG # 定义VGG块 def vgg_block(num_convs, in_channels, out_channels):layers [] # 初始化一个空列表用于存放层卷积层和ReLU激活函数for _ in range(num_convs): # 循环创建指定数量的卷积层和ReLU激活函数layers.append(nn.Conv2d(in_channels, out_channels, kernel_size3, padding1)) # 添加一个卷积层layers.append(nn.ReLU(inplaceTrue)) # 添加一个ReLU激活函数并在原地执行节省内存in_channels out_channels # 更新输入通道数为输出通道数以便下一层使用layers.append(nn.MaxPool2d(kernel_size2, stride2)) # 添加一个最大池化层return nn.Sequential(*layers) # 返回一个由这些层组成的Sequential模型# 定义VGG网络 class VGG(nn.Module):def __init__(self, cfg, num_classes1000):super(VGG, self).__init__()self.conv_layers self._make_layers(cfg) # 创建VGG的卷积层部分self.fc_layers nn.Sequential( # 创建VGG的全连接层部分nn.Linear(512 * 7 * 7, 4096), # 全连接层1nn.ReLU(inplaceTrue), # ReLU激活函数nn.Dropout(), # Dropout层用于防止过拟合nn.Linear(4096, 4096), # 全连接层2nn.ReLU(inplaceTrue), # ReLU激活函数nn.Dropout(), # Dropout层用于防止过拟合nn.Linear(4096, num_classes) # 全连接层3输出类别数)self.flatten nn.Flatten()def forward(self, x):x self.conv_layers(x) # 卷积层部分x self.flatten(x) # 将特征张量展平以输入全连接层x self.fc_layers(x) # 全连接层部分return xdef _make_layers(self, cfg):layers [] # 初始化一个空列表用于存放VGG的层in_channels 3 # 输入通道数为RGB图像的3通道for num_convs, out_channels in cfg:layers.append(vgg_block(num_convs, in_channels, out_channels)) # 添加VGG块in_channels out_channels # 更新输入通道数为输出通道数以便下一层使用return nn.Sequential(*layers) # 返回一个由VGG块组成的Sequential模型# 不同版本的VGG配置 cfgs {VGG11: [(1, 64), (1, 128), (2, 256), (2, 512), (2, 512)], # VGG11的卷积层配置VGG13: [(2, 64), (2, 128), (2, 256), (2, 512), (2, 512)], # VGG13的卷积层配置VGG16: [(2, 64), (2, 128), (3, 256), (3, 512), (3, 512)], # VGG16的卷积层配置VGG19: [(2, 64), (2, 128), (4, 256), (4, 512), (4, 512)] # VGG19的卷积层配置 }# 实例化不同版本的VGG def get_vgg(model_name, num_classes1000):cfg cfgs[model_name] # 获取指定版本的VGG配置model VGG(cfg, num_classes) # 根据配置创建相应版本的VGG模型return model # 返回指定版本的VGG模型# 实例化不同版本的VGG示例 # vgg11 get_vgg(VGG11) # vgg13 get_vgg(VGG13) vgg16 get_vgg(VGG16) # 修改分类数目vgg16 get_vgg(VGG16,num_classes10) # vgg19 get_vgg(VGG19)summary(vgg16.to(device), (3, 224, 224)) 3.2 手动实现VGG16简易版 还有一个简单易懂的实现方式如VGG16实现如下。但这种方式如果网络比较深代码就比较冗长了而且一次只能实现一种模型 # 定义VGG16模型结构 class VGG16(nn.Module):def __init__(self, num_classes1000):super(VGG16, self).__init__()# 特征层self.features nn.Sequential(nn.Conv2d(3, 64, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(64, 64, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size2, stride2),nn.Conv2d(64, 128, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(128, 128, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size2, stride2),nn.Conv2d(128, 256, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(256, 256, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(256, 256, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size2, stride2),nn.Conv2d(256, 512, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(512, 512, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(512, 512, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size2, stride2),nn.Conv2d(512, 512, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(512, 512, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(512, 512, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size2, stride2),)self.flatten nn.Flatten()# 分类层 self.classifier nn.Sequential(nn.Linear(512 * 7 * 7, 4096),nn.ReLU(inplaceTrue),nn.Dropout(),nn.Linear(4096, 4096),nn.ReLU(inplaceTrue),nn.Dropout(),nn.Linear(4096, num_classes),)def forward(self, x):x self.features(x)x self.flatten(x)x self.classifier(x)return x 3.2 使用Pytorch自带的VGG 官方文档VGG — Torchvision 0.16 documentation (pytorch.org)。Pytorch官方实现了VGG并且还附带有在ImageNet上预训练权重 可以看到还有bn版本可选即在卷积后增加使用了batch-normalization批量归一化。下面是使用的示例 # 初始化预训练的vgg16模型 modelPre models.vgg16(weightsDEFAULT) summary(modelPre.to(device), (3, 224, 224)) weightsDEFAULT会默认使用最新最好的权重或者直接指明weightsIMAGENET1K_V1什么模型有什么权重可以直接去官方文档中查看就好。 除了加入了全局平均池化层之外其他和我们自己实现的是一样的。全局平均池化层可以支持任意输入尺寸无论31输出什么尺寸全部变成7×7 4.VGG在CIFAR-10简单实践  所需库 import torch import torch.nn as nn from torchsummary import summary import torch.optim as optim import torchvision.datasets as datasets import torchvision.transforms as transforms from torch.utils.data import DataLoader from tqdm import tqdm from torchvision import models import matplotlib.pyplot as plt 1.修改网络结构 CIFAR-10输入尺寸为32×32为了适应该数据集需要简单修改一下第一层全连接层的输入参数。根据网络结构尺寸会减半5次对于224×224来说会降到7则会降低到1。 将nn.Linear(512 * 7 * 7, 4096)修改为nn.Linear(512 * 1 * 1, 4096) # 定义VGG16模型结构 class VGG16(nn.Module):def __init__(self, num_classes1000):super(VGG16, self).__init__()# 特征层self.features nn.Sequential(nn.Conv2d(3, 64, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(64, 64, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size2, stride2),nn.Conv2d(64, 128, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(128, 128, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size2, stride2),nn.Conv2d(128, 256, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(256, 256, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(256, 256, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size2, stride2),nn.Conv2d(256, 512, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(512, 512, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(512, 512, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size2, stride2),nn.Conv2d(512, 512, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(512, 512, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.Conv2d(512, 512, kernel_size3, padding1),nn.ReLU(inplaceTrue),nn.MaxPool2d(kernel_size2, stride2),)self.flatten nn.Flatten()# 分类层 self.classifier nn.Sequential(#nn.Linear(512 * 7 * 7, 4096),nn.Linear(512 * 1 * 1, 4096),nn.ReLU(inplaceTrue),nn.Dropout(),nn.Linear(4096, 4096),nn.ReLU(inplaceTrue),nn.Dropout(),nn.Linear(4096, num_classes),)def forward(self, x):x self.features(x)x self.flatten(x)x self.classifier(x)return x# 打印模型结构 model VGG16(num_classes10).to(device) summary(model, (3, 32, 32)) 2.读取数据集 # 数据预处理 transform transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)), ])# 加载CIFAR-10数据集 train_dataset datasets.CIFAR10(root./dataset, trainTrue, downloadTrue, transformtransform) test_dataset datasets.CIFAR10(root./dataset, trainFalse, downloadTrue, transformtransform)# 数据加载器 train_dataloader DataLoader(train_dataset, batch_size128, shuffleTrue) test_dataloader DataLoader(test_dataset, batch_size128, shuffleFalse) 3.使用GPU device cuda if torch.cuda.is_available() else cpu 4.模型训练 def train(model, lr, epochs, train_dataloader, device, save_path):# 将模型放入GPUmodel model.to(device)# 使用交叉熵损失函数loss_fn nn.CrossEntropyLoss().to(device)# SGDoptimizer torch.optim.SGD(model.parameters(), lrlr, weight_decay5e-4, momentum0.9)# 记录训练与验证数据train_losses []train_accuracies []# 开始迭代 for epoch in range(epochs): # 切换训练模式model.train() # 记录变量train_loss 0.0correct_train 0total_train 0# 读取训练数据并使用 tqdm 显示进度条for i, (inputs, targets) in tqdm(enumerate(train_dataloader), totallen(train_dataloader), descfEpoch {epoch1}/{epochs}, unitbatch):# 训练数据移入GPUinputs inputs.to(device)targets targets.to(device)# 模型预测outputs model(inputs)# 计算损失loss loss_fn(outputs, targets)# 梯度清零optimizer.zero_grad()# 反向传播loss.backward()# 使用优化器优化参数optimizer.step()# 记录损失train_loss loss.item()# 计算训练正确个数_, predicted torch.max(outputs, 1)total_train targets.size(0)correct_train (predicted targets).sum().item()# 计算训练正确率并记录train_loss / len(train_dataloader)train_accuracy correct_train / total_traintrain_losses.append(train_loss)train_accuracies.append(train_accuracy)# 输出训练信息print(fEpoch [{epoch 1}/{epochs}] - Train Loss: {train_loss:.4f}, Train Acc: {train_accuracy:.4f})# 绘制损失和正确率曲线plt.figure(figsize(10, 5))plt.subplot(1, 2, 1)plt.plot(range(epochs), train_losses, labelTraining Loss)plt.xlabel(Epoch)plt.ylabel(Loss)plt.legend()plt.subplot(1, 2, 2)plt.plot(range(epochs), train_accuracies, labelAccuracy)plt.xlabel(Epoch)plt.ylabel(Accuracy)plt.legend()plt.tight_layout()plt.show()torch.save(model.state_dict(), save_path) model VGG16(num_classes10) lr 0.0001 epochs 10 save_path ./modelWeight/VGG16_CIFAR10 train(model,lr,epochs,train_dataloader,device,save_path)
http://www.w-s-a.com/news/774322/

相关文章:

  • 电商网站开发团队广西桂林商贸旅游技工学校
  • 网站模板文件怎么下载东莞常平镇邮政编码
  • 建网站需要什么wordpress误删的后果
  • wordpress无插件实现网站地图做阿里巴巴网站店铺装修费用
  • 英文互动网站建设南宁住房和城乡建设局网站
  • 威海微网站建设乐清建网站哪家强
  • 网站和app的开发成本saas系统开发教程
  • ps切片工具做网站大气简洁网站
  • 网至普的营销型网站建设wordpress邮箱验证插件下载
  • 找权重高的网站方法张家港早晨网站建设
  • WordPress数据库添加管理员关键词优化举例
  • 河南国基建设集团--官方网站wordpress qode
  • 做农村电子商务的网站有哪些内容静态网站模板古典
  • 导航网站设计方案个人网站推广方法
  • 网站排名易下拉教程防wordpress花园
  • 计算机网站建设 是什么意思现在网站建站的主流语言是什么
  • php网站跟随导航西安百姓网免费发布信息网
  • 濮阳做公司网站html5 特效网站
  • ppt设计器怎么打开深圳seo网络推广营销
  • 建设银行网站用360浏览器建设信用卡中心网站
  • 创建公司网站 教程广州建设局
  • 详述网站建设的过程简答题ui培训设计怎么样
  • 动易网站官网ppt主题大全素材
  • 怎样用eclipse做网站可以做宣传图的网站
  • 哪里可以做游戏视频网站做网站平台应该注意哪些
  • 网站后期推广是谁来做网页制作步骤作答题
  • 全屋装修设计定制整装成都网站优化多少钱
  • html5购物网站模板一个网站两个数据库
  • 个人网站怎么做微信支付网站建设项目介绍
  • 建网站合同网站适配移动端和PC端