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

乐清网页设计公司哪家好seo推广任务小结

乐清网页设计公司哪家好,seo推广任务小结,莱西网站建设哪家好,阿里巴巴网# 告诉模型训练的时候 对某个东西 给予额外的注意 额外的权重参数 分配注意力 # 不重要的就抑制 降低权重参数 比如有些项目颜色重要 有些是形状重要 # 通道注意力 一般都要比较多的通道加注意力 # SENet # 把上层的特征图 自动卷积为 1X1的通道数不变的特征图 然后给每一个…# 告诉模型训练的时候 对某个东西 给予额外的注意 额外的权重参数 分配注意力 # 不重要的就抑制 降低权重参数 比如有些项目颜色重要 有些是形状重要 # 通道注意力 一般都要比较多的通道加注意力 # SENet # 把上层的特征图 自动卷积为 1X1的通道数不变的特征图 然后给每一个通道乘一个权重 就分配了各个通道的注意力 把这个与原图残差回去 与原图融合 这样对比原图来说 形状 CHW都没变 # 注意力机制 可以即插即用 CHW都没变 import torch import os import torch.nn as nn from torchvision.models import resnet18,ResNet18_Weights from torchvision.models.resnet import _resnet,BasicBlock pathos.path.dirname(__file__) onnxpathos.path.join(path,assets/resnet_SE-Identity.onnx) onnxpathos.path.relpath(onnxpath) class SENet1(nn.Module): def __init__(self,inchannel,r16): super().__init__() # 全局平均池化 把所以通道 整个通道进行平均池化 self.inchannelinchannel self.pool1nn.AdaptiveAvgPool2d(1) # 对全局平均池化后的结果 赋予每个通道的权重 不选择最大池化因为不是在突出最大的特征 # 这里不是直接一个全连接生成 权重 而是用两个全连接来生成 权重 第一个relu激活 第二个Sigmoid 为每一个通道生成一个0-1的权重 # 第一个全连接输出的通道数数量要缩小一下不能直接传入多少就输出多少不然参数量太多第二个通道再输出回去就行 # 缩放因子 self.fc1nn.Sequential(nn.Linear(self.inchannel,self.inchannel//r),nn.ReLU()) self.fc2nn.Sequential(nn.Linear(self.inchannel//r,self.inchannel),nn.Sigmoid()) # fc1 用relu会信息丢失 保证inchannel//r 至少要32 # 用两层全连接可以增加注意力层的健壮性 def forward(self,x): x1self.pool1(x) x1x1.view(x1.shape[0],-1) x1self.fc1(x1) x1self.fc2(x1) # 得到了每一个通道的权重 x1x1.unsqueeze(2).unsqueeze(3) # 与原来的相乘 return x*x1 def demo1(): torch.manual_seed(666) img1torch.rand(1,128,224,224) senet1SENet1(img1.shape[1],2) ressenet1.forward(img1) print(res.shape) # 可以把SE模块加入到经典的CNN模型里面 有残差模块的在残差模块后面加入SE 残差模块的输出 当SE模块的输入   # 在卷积后的数据与原数据相加之前 把卷积的数据和 依靠卷积后的数据产生的SE模块的数据 相乘 然后再与原数据相加 # 这个要看源码 进行操作 # 也可以不在 残差后面 进行 有很多种插入SE的方式 # 要找到 网络的残差模块 def demo2(): # 把SE模块加入到ResNet18 # 继承一个BasicBlock类 对resnet18的残差模块进行一些重写 class BasicBlock_SE(BasicBlock): def __init__(self, inplanes, planes, stride 1, downsample None, groups 1, base_width 64, dilation 1, norm_layer None): super().__init__(inplanes, planes, stride, downsample, groups, base_width, dilation, norm_layer) self.seSENet1(inplanes)# SE-Identity 加法 在 数据传进来的时候备份两份数据 一份卷积 一份加注意力SE模块 然后两个结果相加输出 def forward(self, x): identity x identityself.se(x) out self.conv1(x) out self.bn1(out) out self.relu(out) out self.conv2(out) out self.bn2(out) if self.downsample is not None: identity self.downsample(identity) out identity out self.relu(out) return out #     self.seSENet1(planes)# SE-POST 加法 在 残差模块彻底完成了后加注意力SE模块 然后结果输出 # def forward(self, x): #     identity x #     out self.conv1(x) #     out self.bn1(out) #     out self.relu(out) #     out self.conv2(out) #     out self.bn2(out) #     if self.downsample is not None: #         identity self.downsample(x) #     out identity #     out self.relu(out) #     outself.se(out) #     return out #     self.seSENet1(inplanes)# SE-PRE 加法 在 残差模块卷积之前加注意力SE模块 然后结果输出 # def forward(self, x): #     identity x #     outself.se(x) #     out self.conv1(out) #     out self.bn1(out) #     out self.relu(out) #     out self.conv2(out) #     out self.bn2(out) #     if self.downsample is not None: #         identity self.downsample(x) #     out identity #     out self.relu(out) #     return out #     self.seSENet1(planes)#  Standard_SE 加法 在 残差模块卷积h后加注意力SE模块 然后与原数据项加结果输出 # def forward(self, x): #     identity x #     out self.conv1(x) #     out self.bn1(out) #     out self.relu(out) #     out self.conv2(out) #     out self.bn2(out) #     if self.downsample is not None: #         identity self.downsample(x) #     outself.se(out) #     out identity #     out self.relu(out) #     return out def resnet18_SE(*, weights None, progress: bool True, **kwargs): weights ResNet18_Weights.verify(weights) return _resnet(BasicBlock_SE, [2, 2, 2, 2], weights, progress, **kwargs) model1resnet18_SE() x torch.randn(1, 3, 224, 224) # 导出onnx torch.onnx.export( model1, x, onnxpath, verboseTrue, # 输出转换过程 input_names[input], output_names[output], ) print(onnx导出成功) # SE在模型的早期层并没有 起多大的作用 在后期层中加 SE机制效果明显 且参数更少 # SE在模型的早期层并没有 起多大的作用 在后期层中加 SE机制效果明显 且参数更少 # 改模型不仅需要 加 一个网络结构 而且也需要注意前向传播 有没有问题 def demo3(): # 在resnet18中的后期 层里面加 SE 前期层不加 class ResNet_SE_laye(ResNet): def __init__(self, block, layers, num_classes 1000, zero_init_residual False, groups 1, width_per_group 64, replace_stride_with_dilation None, norm_layer None): super().__init__(block, layers, num_classes, zero_init_residual, groups, width_per_group, replace_stride_with_dilation, norm_layer) def _layer_update_SE(self): self.seSENet1(self.layer3[1].conv2.out_channels,8) self.layer3[1].conv2nn.Sequential(self.layer3[1].conv2,self.se) print(self.layer3) pass return self.layer3 def _resnet_SE_layer( block, layers, weights, progress: bool, **kwargs, ): if weights is not None: _ovewrite_named_param(kwargs, num_classes, len(weights.meta[categories])) model ResNet_SE_laye(block, layers, **kwargs) if weights is not None: model.load_state_dict(weights.get_state_dict(progressprogress, check_hashTrue)) return model def resnet18_SE_layer(*, weights None, progress: bool True, **kwargs): weights ResNet18_Weights.verify(weights) return _resnet_SE_layer(BasicBlock, [2, 2, 2, 2], weights, progress, **kwargs) modelresnet18_SE_layer() # print(model) layermodel._layer_update_SE() torch.onnx.export(layer,torch.rand(1,128,224,224),layer.onnx) pass if __name____main__: # demo1() # demo2() pass
http://www.w-s-a.com/news/67333/

相关文章:

  • 360建筑网是什么pc优化工具
  • 越秀免费网站建设风景区网站建设项目建设可行性
  • 网站建站公司一站式服务学校网站开发招标
  • asp.net mvc 5 网站开发之美电商网站 流程图
  • 室内设计素材网站推荐郑州专业做淘宝网站建设
  • 新建的网站怎么做seo优化模板规格尺寸及价格
  • 平湖网站设计做电子元器件销售什么网站好
  • 可视化网站模板我想建个网站网站怎么建域名
  • 达州网站建设qinsanw南京市建设发展集团有限公司网站
  • django 网站开发实例公司排行榜
  • 韩国做美食网站阳江网站建设 公司价格
  • 网站开发哪里接业务长春高端模板建站
  • 深圳网站制作公司方案dw一个完整网页的代码
  • asp手机网站源码下载做seo推广网站
  • 网站优化建议怎么写网站维护主要有哪些内容和方法
  • 建设网站需要钱吗网络推广加盟
  • 高清素材图片的网站泰安网签备案查询
  • 自助网站建设怎么建设房地产的最新政策
  • 企业网站 生成html网站侵权怎么做公证或证据保存
  • php 手机网站cms系统购物网站制作流程
  • 网络公司网站开发河北省城乡住房和建设厅网站
  • 做网站配置wordpress 中文api
  • 怎样把网站做的好看县蒙文网站建设汇报
  • 网站的优化什么做广西桂林新闻最新消息
  • 做网站准备什么软件搜索引擎广告推广
  • 网站开发地图板块浮动网页设计与制作的模板
  • 中国建设招聘信息网站昆明做网站建设的公司排名
  • 那些网站可以做自媒体wordpress 分类seo
  • 淮安市盱眙县建设局网站北京西站到八达岭长城最快路线
  • 在线免费网站企业查查官网入口官网