烟台网站建设费用网页设计100个经典案例

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

烟台网站建设费用,网页设计100个经典案例,网站建设公司官网,用vs2012做asp网站1. 简介 本文主要介绍基于chatGPT#xff0c;设计一个针对骁龙855芯片设计的友好型神经网络。 提问-跑通总共花了5min左右#xff0c;最终得到的网络在Cifar100数据集上与ResNet18的精度对比如下。 模型flopsparamstrain acc1/5test acc1/5ResNet18(timm)1.8211.18~98…1. 简介 本文主要介绍基于chatGPT设计一个针对骁龙855芯片设计的友好型神经网络。 提问-跑通总共花了5min左右最终得到的网络在Cifar100数据集上与ResNet18的精度对比如下。 模型flopsparamstrain acc1/5test acc1/5ResNet18(timm)1.8211.18~98%/100%63.11%/86.11%CNN-GPT1.516.6698%/100%68.44%/89.14% 此外GPT生成的模型训练速度更快ResNet18才训练170个epochCNN-GPT已经完整地训练完了具体的模型结构在文末欢迎尝试使用 个人认为比较有意思的一点是GPT生成的模型并没有在stem block中就进行降采样而是卷了一会之后才开始这个与之前在文本任务中的经验结果类似特征图越大会避免信息损失。 基于chatGPT生成模型结构的方式或许在某些情况下可以解决我们的问题但是基础的神经网络知识还是需要的否则它给出的答案有些小bug我们也不知道怎么修改。 模型训练结果与超参设置强相关在这里仅设置默认的训练策略作为对比根据训练结果看出两个模型均过拟合严重。而且不管是ResNet18或者CNN-GPT均与Cifar100数据集的SOTA精度相差很远此处需要注意。 2. 具体步骤 Step1 骁龙855芯片上可以正常运行的算子 基于上述问题chatGPT给出的回答如下所示。 以下是在骁龙855芯片上比较友好的神经网络算子1. Conv2d

  1. Depthwise Conv2d
  2. Maxpool2d
  3. Avgpool2d
  4. BatchNorm2d
  5. ReLU
  6. Flatten
  7. Linear整体看起来还算比较靠谱。 Step2 构建一个模型大小在10M左右的模型 针对上面的问题chatGPT首先给出了思路。 如果想设计一个在骁龙855芯片上运行速度很快模型大小在10M以内的模型可以考虑使用以下方法来进行优化1. 使用深度可分离卷积代替标准卷积以获得更快的速度和更小的模型尺寸。
  8. 使用深度方向的滤波器来替换全连接层以减少参数数量并减少内存使用。
  9. 对于每个卷积层使用Batch Norm层来加速收敛。
  10. 使用ReLU代替传统的Sigmoid或Tanh激活函数因为ReLU的计算效率更高。然后给出了一个模型示例。 以下是一个可以作为参考的模型Conv2d(3, 32, kernel_size3, stride1, padding1) BatchNorm2d(32) ReLU()DepthwiseConv2d(32, kernel_size3, stride1, padding1) BatchNorm2d(32) ReLU()Conv2d(32, 64, kernel_size3, stride2, padding1) BatchNorm2d(64) ReLU()DepthwiseConv2d(64, kernel_size3, stride1, padding1) BatchNorm2d(64) ReLU()Conv2d(64, 128, kernel_size3, stride2, padding1) BatchNorm2d(128) ReLU()DepthwiseConv2d(128, kernel_size3, stride1, padding1) BatchNorm2d(128) ReLU()Conv2d(128, 256, kernel_size3, stride2, padding1) BatchNorm2d(256) ReLU()DepthwiseConv2d(256, kernel_size3, stride1, padding1) BatchNorm2d(256) ReLU()Conv2d(256, 512, kernel_size3, stride2, padding1) BatchNorm2d(512) ReLU()DepthwiseConv2d(512, kernel_size3, stride1, padding1) BatchNorm2d(512) ReLU()Conv2d(512, 1024, kernel_size3, stride2, padding1) BatchNorm2d(1024) ReLU()Avgpool2d(kernel_size4) Flatten() Linear(1024, 10)上面生成的模型有几个小问题。 DepthwiseConv2d没有被定义DepthwiseConv2d的参数列表中没有out channel的参数需要手动补充。 Step3 生成一个DepthwiseConv2d结构 chatGPT回答如下 以下是一个非常简单的torch的DepthwiseConv2d实现 import torch.nn as nnclass DepthwiseConv2d(nn.Module):def init(self, in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groupsNone):super(DepthwiseConv2d, self).init()if groups is None:groups in_channelsself.depthwise_conv nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, dilation, groupsgroups)self.pointwise_conv nn.Conv2d(out_channels, out_channels, 1, 1, 0, 1, groups1)def forward(self, x):x self.depthwise_conv(x)x self.pointwise_conv(x)return x加入到模型结构定义文件中同时修改类别数就可以进行模型训练了。 设置训练超参数 为保证对比的公平性下面是训练过程中的一些超参数 parser.add_argument(–epoch, typeint, default240)parser.add_argument(–batch_size, typeint, default64)parser.add_argument(–lr, typefloat, default0.05)parser.add_argument(–lr_decay_rate, typefloat, default0.1)parser.add_argument(–lr_decay_stages, typestr, default150,180,210)parser.add_argument(–wd, typefloat, default0.0005)3. 完整的模型结构 完整的模型结构如下也欢迎大家在自己的数据集上尝试。 import torch import torch.nn as nnclass DepthwiseConv2d(nn.Module):def init(self, in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groupsNone):super(DepthwiseConv2d, self).init()if groups is None:groups in_channelsself.depthwise_conv nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, dilation, groupsgroups)self.pointwise_conv nn.Conv2d(out_channels, out_channels, 1, 1, 0, 1, groups1)def forward(self, x):x self.depthwise_conv(x)x self.pointwise_conv(x)return xclass CNNGPT(nn.Module):def init(self) - None:super().init()self.model nn.Sequential(nn.Conv2d(3, 32, kernel_size3, stride1, padding1),nn.BatchNorm2d(32),nn.ReLU(),DepthwiseConv2d(32, 32, kernel_size3, stride1, padding1),nn.BatchNorm2d(32),nn.ReLU(),nn.Conv2d(32, 64, kernel_size3, stride2, padding1),nn.BatchNorm2d(64),nn.ReLU(),DepthwiseConv2d(64, 64, kernel_size3, stride1, padding1),nn.BatchNorm2d(64),nn.ReLU(),nn.Conv2d(64, 128, kernel_size3, stride2, padding1),nn.BatchNorm2d(128),nn.ReLU(),DepthwiseConv2d(128, 128, kernel_size3, stride1, padding1),nn.BatchNorm2d(128),nn.ReLU(),nn.Conv2d(128, 256, kernel_size3, stride2, padding1),nn.BatchNorm2d(256),nn.ReLU(),DepthwiseConv2d(256, 256, kernel_size3, stride1, padding1),nn.BatchNorm2d(256),nn.ReLU(),nn.Conv2d(256, 512, kernel_size3, stride2, padding1),nn.BatchNorm2d(512),nn.ReLU(),DepthwiseConv2d(512, 512, kernel_size3, stride1, padding1),nn.BatchNorm2d(512),nn.ReLU(),nn.Conv2d(512, 1024, kernel_size3, stride2, padding1),nn.BatchNorm2d(1024),nn.AdaptiveAvgPool2d(1),nn.Flatten(),nn.Linear(1024, 100),)def forward(self, x):y self.model(x)return ydef get_flops_params(model):from thop import profilemodel.eval()flops, params profile(model,inputs[torch.randn([1, 3, 224, 224]),],)print(fflops: {flops/10003} G, params: {params/10002} M)return flops, paramsif name main:model CNNGPT()get_flops_params(model)