关于CBAM模块在ResNet18上的使用:用于MNIST数据集分类

昨天学习了CBAM模块和ACNet。

今天就想试一下CBAM模块的效果,所以编写了代码在MNIST数据集上做分类任务,但是看不出什么差别,而且没加CBAM模块的效果反而好一些。

我觉得原因可能是因为数据集太小了没法做到这一点,改天在VOC数据集上试一试效果看看如何。

今天先把实验结果报道一下,学习率,epoch次数和batch_size的大小完全保持不变

先上Pytorch代码

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.utils.model_zoo as model_zoo
import math
import torchvision
import torch.optim as optim  # Pytoch常用的优化方法都封装在torch.optim里面
import matplotlib.pyplot as plt


from torch.utils.data import DataLoader

model_urls = {
   
   
    'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth',
}
# 定义卷积核3*3,padding=1,stride=1的卷积,这个卷积的特点是不改变特征图的size,但可能改变channel
def conv3x3(in_channels,out_channels,stride=1):
    return nn.Conv2d(in_channels=in_channels,out_channels=out_channels,kernel_size=3,stride=stride,padding=1,bias=False)
# 定义CBAM中的channel attention模块
class ChannelAttention(nn.Module):
    # 需要传入输入通道数和压缩倍数reduction,默认是16
    def __init__(self,in_channels,reduction = 16):
        super(ChannelAttention,self).__init__()
        #定义需要的全局平均池化和全局最大池化,传入输出通道数output_size = 1
        self.avg = nn.AdaptiveAvgPool2d(output_size=1)
        self.max = nn.AdaptiveMaxPool2d(output_size=1)
        ## 定义共享感知机MLP
        self.fc1 = nn.Conv2d(in_channels=in_channels,out_channels=in_channels//reduction,kernel_size=1,bias=False)
        self.relu1 = nn.ReLU()
        self.fc2 = nn.Conv2d(in_channels=in_channels//reduction,out_channels=in_channels,kernel_size=1,bias=False)

        ## 定义线性激活函数
        self.sigmod = nn.Sigmoid()
    def forward(self,x):
        avg_out = self.fc2(self.relu1(self.fc1(self.avg(x))))
        max_out = self.fc2(self.relu1(self.fc1(self.max(x))))

        out = self.sigmod(avg_out + max_out)

        return out

## 定义spatial attention模块
class SpatialAttention(nn.Module):
    # 空间注意力模块有一个卷积层,需要传入kernel_size
    def __init__(self,kernel_size = 7):
        super(SpatialAttention,self).__init__()
        padding = 3 if kernel_size == 7 else 1

        self.conv1 = nn.Conv2d(in_channels = 2,out_channels = 1,kernel_size=kernel_size,padding = padding,bias=False)
        self.sigmod = nn.Sigmoid()

    def forward(self,x):
        avg_out = torch.mean(x, dim = 1, keepdim = True)
        max_out, _ = torch.max(x, dim = 
【资源说明】 基于Pytorch框架实现ResNet18中嵌入视觉注意力机制python源码+项目说明.zip 在ResNet18中嵌入视觉注意力机制 # 实验环境 实验环境配置 | **相关设置** | | | ------------ | ---------------------------------------------- | | 实验数据集 | CIFAR-100 | | 实验平台 | Pytorch 1.12.0 | | 神经网络 | ResNet18 | | 损失函数 | CrossEntropyLoss | | 优化器 | Adam | | 学习率 | 0.001,每迭代20次更新 | | BATCH_SIZE | 50 | | Epochs | 20,50 | | Python 版本 | Python 3.8 | | 代码编辑器 | Jupyter lab | | 操作系统 | Win10 | | CPU | IntelI CoreI i7-10750H CPU @ 2.60GHz 2.59 GHz | | CUDA版本 | 4.8.3 | 需要的包: - ` torch`,`torchvision`, - `matplotlib`, - `numpy`,`pandas`,`time` - `thop` 安装方式: - 依赖包安装方式为:打开Anaconda Prompt,在命令行输入 ``` pip install + 包名 ``` - Pytorch安装方式 在Anaconda中,安装pytorch 环境,在Anaconda Promp中,输入以下指令 ``` conda install pytorch torchvision cudatoolkit=10.1 -c pytorch ``` 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值