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

想开发一个旧物交易网站应该怎么做网站模板织梦

想开发一个旧物交易网站应该怎么做,网站模板织梦,网站内容怎么做备份,手机网站主页面文艺注意力机制1 SENet2 ECANet3 CBAM3.1 通道注意力3.2 空间注意力3.3 CBAM4 展示网络层具体信息1 SENet SE注意力机制#xff08;Squeeze-and-Excitation Networks#xff09;:是一种通道类型的注意力机制#xff0c;就是在通道维度上增加注意力机制#xff0c;主要内容是是… 注意力机制1 SENet2 ECANet3 CBAM3.1 通道注意力3.2 空间注意力3.3 CBAM4 展示网络层具体信息1 SENet SE注意力机制Squeeze-and-Excitation Networks:是一种通道类型的注意力机制就是在通道维度上增加注意力机制主要内容是是squeeze和excitation. 就是使用另外一个新的神经网络(两个Linear层)针对通道维度的数据进行学习获取到特征图每个通道的重要程度然后再和原始通道数据相乘即可。 具体参考Blog CNN中的注意力机制 小结 SENet的核心思想是通过全连接网络根据loss损失来自动学习特征权重而不是直接根据特征通道的数值分配来判断使有效的特征通道的权重大。 论文认为excitation操作中使用两个全连接层相比直接使用一个全连接层它的好处在于具有更多的非线性可以更好地拟合通道间的复杂关联。 代码 拆解步骤forward代码写的比较细节 import torch from torch import nn from torchstat import stat # 查看网络参数# 定义SE注意力机制的类 class se_block(nn.Module):# 初始化, in_channel代表输入特征图的通道数, ratio代表第一个全连接下降通道的倍数def __init__(self, in_channel, ratio4):# 继承父类初始化方法super(se_block, self).__init__()# 属性分配# 全局平均池化输出的特征图的宽高1self.avg_pool nn.AdaptiveAvgPool2d(output_size1)# 第一个全连接层将特征图的通道数下降4倍self.fc1 nn.Linear(in_featuresin_channel, out_featuresin_channel//ratio, biasFalse)# relu激活self.relu nn.ReLU()# 第二个全连接层恢复通道数self.fc2 nn.Linear(in_featuresin_channel//ratio, out_featuresin_channel, biasFalse)# sigmoid激活函数将权值归一化到0-1self.sigmoid nn.Sigmoid()# 前向传播def forward(self, inputs): # inputs 代表输入特征图# 获取输入特征图的shapeb, c, h, w inputs.shape# 全局平均池化 [b,c,h,w][b,c,1,1]x self.avg_pool(inputs)# 维度调整 [b,c,1,1][b,c]x x.view([b,c])# 第一个全连接下降通道 [b,c][b,c//4] # 这里也是使用Linear层的原因只是对Channel进行线性变换x self.fc1(x)x self.relu(x)# 第二个全连接上升通道 [b,c//4][b,c] # 再通过Linear层恢复Channel数目x self.fc2(x)# 对通道权重归一化处理 # 将数值转化为01之间体现不同通道之间重要程度x self.sigmoid(x)# 调整维度 [b,c][b,c,1,1] x x.view([b,c,1,1])# 将输入特征图和通道权重相乘outputs x * inputsreturn outputs结果展示 提示 in_channel/ratio需要大于0否则线性层输入是0维度没有意义可以根据自己需求调整ratio的大小。 2 ECANet 作者表明 SENet 中的降维会给通道注意力机制带来副作用并且捕获所有通道之间的依存关系是效率不高的而且是不必要的。 参考Blog CNN中的注意力机制 代码 详细版本在forward中介绍了每一步的作用 import torch from torch import nn import math from torchstat import stat # 查看网络参数# 定义ECANet的类 class eca_block(nn.Module):# 初始化, in_channel代表特征图的输入通道数, b和gama代表公式中的两个系数def __init__(self, in_channel, b1, gama2):# 继承父类初始化super(eca_block, self).__init__()# 根据输入通道数自适应调整卷积核大小kernel_size int(abs((math.log(in_channel, 2)b)/gama))# 如果卷积核大小是奇数就使用它if kernel_size % 2:kernel_size kernel_size# 如果卷积核大小是偶数就把它变成奇数else:kernel_size kernel_size 1# 卷积时为例保证卷积前后的size不变需要0填充的数量padding kernel_size // 2# 全局平均池化输出的特征图的宽高1self.avg_pool nn.AdaptiveAvgPool2d(output_size1)# 1D卷积输入和输出通道数都1卷积核大小是自适应的# 这个1维卷积需要好好了解一下机制这是改进SENet的重要不同点self.conv nn.Conv1d(in_channels1, out_channels1, kernel_sizekernel_size,biasFalse, paddingpadding)# sigmoid激活函数权值归一化self.sigmoid nn.Sigmoid()# 前向传播def forward(self, inputs):# 获得输入图像的shapeb, c, h, w inputs.shape# 全局平均池化 [b,c,h,w][b,c,1,1]x self.avg_pool(inputs)# 维度调整变成序列形式 [b,c,1,1][b,1,c]x x.view([b,1,c]) # 这是为了给一维卷积# 1D卷积 [b,1,c][b,1,c]x self.conv(x)# 权值归一化x self.sigmoid(x)# 维度调整 [b,1,c][b,c,1,1]x x.view([b,c,1,1])# 将输入特征图和通道权重相乘[b,c,h,w]*[b,c,1,1][b,c,h,w]outputs x * inputsreturn outputs精简版 import torch import torch.nn as nn import torch.nn.functional as F from torchinfo import summary import mathclass EfficientChannelAttention(nn.Module): # Efficient Channel Attention moduledef __init__(self, c, b1, gamma2):super(EfficientChannelAttention, self).__init__()t int(abs((math.log(c, 2) b) / gamma))k t if t % 2 else t 1self.avg_pool nn.AdaptiveAvgPool2d(1)self.conv1 nn.Conv1d(1, 1, kernel_sizek, paddingint(k/2), biasFalse)self.sigmoid nn.Sigmoid()def forward(self, x):x self.avg_pool(x)# 这里可以对照上一版代码理解每一个函数的作用x self.conv1(x.squeeze(-1).transpose(-1, -2)).transpose(-1, -2).unsqueeze(-1)out self.sigmoid(x)return out效果展示 总结 ECANet参数更少 3 CBAM CBAM注意力机制是由**通道注意力机制channel和空间注意力机制spatial**组成。 先通道注意力后空间注意力的顺序注意力模块 3.1 通道注意力 输入数据对数据分别做最大池化操作和平均池化操作(输出都是batchchannel11)然后使用SENet的方法针对channel进行先降维后升维操作之后将输出的两个结果相加再使用Sigmoid得到通道权重再之后使用View函数恢复**(batchchannel11)**维度和原始数据相乘得到通道注意力结果 通道注意力代码 #1通道注意力机制 class channel_attention(nn.Module):# 初始化, in_channel代表输入特征图的通道数, ratio代表第一个全连接的通道下降倍数def __init__(self, in_channel, ratio4):# 继承父类初始化方法super(channel_attention, self).__init__()# 全局最大池化 [b,c,h,w][b,c,1,1]self.max_pool nn.AdaptiveMaxPool2d(output_size1)# 全局平均池化 [b,c,h,w][b,c,1,1]self.avg_pool nn.AdaptiveAvgPool2d(output_size1)# 第一个全连接层, 通道数下降4倍self.fc1 nn.Linear(in_featuresin_channel, out_featuresin_channel//ratio, biasFalse)# 第二个全连接层, 恢复通道数self.fc2 nn.Linear(in_featuresin_channel//ratio, out_featuresin_channel, biasFalse)# relu激活函数self.relu nn.ReLU()# sigmoid激活函数self.sigmoid nn.Sigmoid()# 前向传播def forward(self, inputs):# 获取输入特征图的shapeb, c, h, w inputs.shape# 输入图像做全局最大池化 [b,c,h,w][b,c,1,1]max_pool self.max_pool(inputs)# 输入图像的全局平均池化 [b,c,h,w][b,c,1,1]avg_pool self.avg_pool(inputs)# 调整池化结果的维度 [b,c,1,1][b,c]max_pool max_pool.view([b,c])avg_pool avg_pool.view([b,c])# 第一个全连接层下降通道数 [b,c][b,c//4]x_maxpool self.fc1(max_pool)x_avgpool self.fc1(avg_pool)# 激活函数x_maxpool self.relu(x_maxpool)x_avgpool self.relu(x_avgpool)# 第二个全连接层恢复通道数 [b,c//4][b,c]x_maxpool self.fc2(x_maxpool)x_avgpool self.fc2(x_avgpool)# 将这两种池化结果相加 [b,c][b,c]x x_maxpool x_avgpool# sigmoid函数权值归一化x self.sigmoid(x)# 调整维度 [b,c][b,c,1,1]x x.view([b,c,1,1])# 输入特征图和通道权重相乘 [b,c,h,w]outputs inputs * xreturn outputs3.2 空间注意力 针对输入数据分别选取数据中最大值所在的维度(batch1h*w)和按照维度进行数据平均操作(batch1hw),然后将两个数据做通道连接(batch2hw),使用卷积操作将channel维度降为1之后对结果取sigmoid得到空间注意力权重和原始数据相乘得到空间注意力结果。 代码 #2空间注意力机制 class spatial_attention(nn.Module):# 初始化卷积核大小为7*7def __init__(self, kernel_size7):# 继承父类初始化方法super(spatial_attention, self).__init__()# 为了保持卷积前后的特征图shape相同卷积时需要paddingpadding kernel_size // 2# 7*7卷积融合通道信息 [b,2,h,w][b,1,h,w]self.conv nn.Conv2d(in_channels2, out_channels1, kernel_sizekernel_size,paddingpadding, biasFalse)# sigmoid函数self.sigmoid nn.Sigmoid()# 前向传播def forward(self, inputs):# 在通道维度上最大池化 [b,1,h,w] keepdim保留原有深度# 返回值是在某维度的最大值和对应的索引x_maxpool, _ torch.max(inputs, dim1, keepdimTrue)# 在通道维度上平均池化 [b,1,h,w]x_avgpool torch.mean(inputs, dim1, keepdimTrue)# 池化后的结果在通道维度上堆叠 [b,2,h,w]x torch.cat([x_maxpool, x_avgpool], dim1)# 卷积融合通道信息 [b,2,h,w][b,1,h,w]x self.conv(x)# 空间权重归一化x self.sigmoid(x)# 输入特征图和空间权重相乘outputs inputs * xreturn outputs3.3 CBAM 将通道注意力模块和空间注意力模块顺序串联得到CBAM模块 代码 class cbam(nn.Module):# 初始化in_channel和ratio4代表通道注意力机制的输入通道数和第一个全连接下降的通道数# kernel_size代表空间注意力机制的卷积核大小def __init__(self, in_channel, ratio4, kernel_size7):# 继承父类初始化方法super(cbam, self).__init__()# 实例化通道注意力机制self.channel_attention channel_attention(in_channelin_channel, ratioratio)# 实例化空间注意力机制self.spatial_attention spatial_attention(kernel_sizekernel_size)# 前向传播def forward(self, inputs):# 先将输入图像经过通道注意力机制x self.channel_attention(inputs)# 然后经过空间注意力机制x self.spatial_attention(x)return x结果 4 展示网络层具体信息 安装包 pip install torchstat使用 from torchstat import stat net cbam(16) stat(net, (16, 256, 256)) # 不需要Batch维度注意力机制后期学习到再持续更新 参考博客 CNN注意力机制 ECANet
http://www.w-s-a.com/news/671750/

相关文章:

  • 杭州设计企业网站高端公司上虞做网站公司
  • 做网站能赚钱么用wordpress搭建知名网站
  • 阿里云服务器网站开发青岛做网站找哪家
  • 凡科做的网站为什么打不开织梦cms仿某作文网站整站源码(带采集)安装数据库
  • 免费h5模板网站模板汽车报价网址
  • 蔡甸网站建设烟台网站建设yt
  • 最流行的网站开发新开的网页游戏平台
  • 暴富建站wordpress 标签分类
  • 搞笑网站源码百度快照替代
  • 重庆网站建设哪家公司哪家好关键词是怎么排名的
  • 青县网站建设今天国际大事新闻
  • 深圳正规网站制作哪里好怎样优化网络
  • 米拓网站建设教程dw成品网站成品视频教学
  • 用jsp做的网站源代码天门网站网站建设
  • 百度如何把网站做链接地址有没有资源可以在线观看
  • 淮安做网站找哪家好电子商务网站建设规划书的内容
  • 开发网站建设用什么框架php黄页系统
  • 聊城制作网站全球十大电商平台排名
  • 用什么来网站开发好mega menu wordpress
  • 深圳制作网站有用吗wordpress的主题
  • 网站的规划与创建天津市南开区网站开发有限公司
  • 免备案网站主机建站哪个平台好
  • python做网站 不适合单页营销分享网站
  • 珠海市研发网站建设建设网站挣钱
  • 阿里巴巴国际站特点做wps的网站赚钱
  • wordpress更换域名后网站打不开宜昌建设银行网站
  • 写出网站开发的基本流程百度网页电脑版入口
  • 网站设计有限公司怎么样网站建设西班牙语
  • 网站安全解决方案宁波seo网络推广优化价格
  • 做网站带来好处wordpress可以做oa系统吗