【pytorch】卷积层,最大池化的使用,滤波器,channel,不同kernel

卷积层

由一组可学习的滤波器(也称为卷积核或过滤器)组成的层,用于提取输入数据的特征

import torch
import torchvision
from torch import nn
from torch.nn import Conv2d,ReLU
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter


dataset = torchvision.datasets.CIFAR10('../data',train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader = DataLoader(dataset,batch_size=64)
class Si(nn.Module):
    def __init__(self):
        super(Si,self).__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)
        self.relu = ReLU()
    def forward(self,x):
        x = self.conv1(x)
        x = self.relu(x)
        return x
si = Si()
writer = SummaryWriter("logs")
step = 0
for data in dataloader:
    imgs,targets = data
    output = si(imgs)
    print(imgs.shape)
    print(output.shape)
    # torch.Size([64, 3, 32, 32])
    writer.add_images('input',imgs,step) #输入
    # torch.Size([64, 6, 30, 30])
    output = torch.reshape(output,(-1,3,30,30))
    writer.add_images('output',output,step)#输出
    step = step+1
writer.close()
最大池化的目的

最大池化的目的:保留输入图像的特征,同时把数据量减小,从而降低模型的复杂度,有助于减少过拟合的风险

import torch
import torchvision
from torch import nn
from torch.nn import MaxPool2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

#输入图像
input = torch.tensor([[1, 2, 0, 3, 1],
                       [0, 1, 2, 3, 1],
                       [1, 2, 1, 0, 0],
                       [5, 2, 3, 1, 1],
                       [2, 1, 0, 1, 1]])
input = torch.reshape(input,(-1,1,5,5))
print(input.shape)  #输出改变后的形状
class Si(nn.Module):
    def __init__(self):
        super(Si, self).__init__()
        #ceil_mode = Ture时,池化层会使用向上取整的方式计算输出大小, #tensor([[[[2, 3],
        #                                           [5, 1]]]])
        #ceil_mode = False时,池化层会使用向下取整的方式计算输出大小
        self.maxpool1 = MaxPool2d(kernel_size=3, ceil_mode=False) #tensor([[[[2]]]])
    def forward(self,input):
        output = self.maxpool1(input)
        return output
si = Si()
output = si(input)
print(output)
最大池化的kernel和卷积层中的kernel是不同的

1.最大池化层使用的“核”通常是一个固定大小的窗口,通常是 2x2 或 3x3。最大池化层不需要像卷积层那样设置一个可学习的核。
2.最大池化操作是在输入数据的局部区域中寻找最大值,因为区域最大值也表示此处特征最明显的,并将该最大值作为输出。因此,“核”实际上是一个池化窗口,而不是像卷积核那样具有可学习参数的滤波器。

1.卷积层使用的核是卷积核,也称为滤波器。卷积核是一个小的二维数组,它在输入数据的局部区域进行滑动,并与输入数据进行卷积操作,从而提取输入数据的特征。
2.卷积核的大小通常由用户指定,例如 3x3、5x5 等。在卷积操作中,卷积核的参数是可学习的,它们会随着网络的训练过程而不断调整以优化网络性能。
3.卷积核的数量通常是用户指定的,决定了卷积层输出的通道数。每个卷积核都会生成一个通道的特征图。

滤波器

在信号处理和图像处理中,滤波器(Filter)是一种用于改变信号或图像特性的设备或算法。滤波器通常通过在时域或频域上对信号进行操作,来实现一系列的信号处理目标,例如去除噪声、增强特定频率的成分、平滑信号等。

channel(卷积,最大池化)

1.在卷积神经网络(CNNs)中,每个卷积层包含多个滤波器,每个滤波器在进行卷积操作时,会提取输入特征图中的某种特征,因此不同的滤波器可以提取不同的特征。通过在同一层中使用多个滤波器,卷积层可以同时学习多种特征,从而提高特征的多样性和表征能力。并且,每个滤波器都会产生一个单独的输出特征图,这些输出特征图在通道维度上堆叠在一起,形成卷积层的输出。

因此,卷积层的通道数等于滤波器的数量,每个通道对应一个滤波器的输出特征图。

2.最大池化层是在每个通道(channel)上独立地进行操作,而不是同时在多个通道上操作。最大池化层会从输入特征图的对应通道中选择最大值作为输出。因此,即使输入特征图有多个通道,最大池化操作也是逐通道独立进行的,每个通道的输出都是独立计算的。

这种逐通道操作的方式有助于保留每个通道的特征,并且使得最大池化层在处理多通道特征图时保持了与单通道相同的操作规则,简化了实现和计算。

最后附上最大池化层对图像数据的处理:

import torch
import torchvision
from torch import nn
from torch.nn import MaxPool2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

dataset = torchvision.datasets.CIFAR10('../data',train = False,download=True,transform=torchvision.transforms.ToTensor())
dataloader = DataLoader(dataset,batch_size=64)

class Si(nn.Module):
    def __init__(self):
        super(Si, self).__init__()
        #ceil_mode = Ture时, 池化层会使用向上取整的方式计算输出大小,会对不完整的卷积进行保留 #tensor([[[[2, 3],
        #                                           [5, 1]]]])
        self.maxpool1 = MaxPool2d(kernel_size=3, ceil_mode=False) #tensor([[[[2]]]])
    def forward(self,input):
        output = self.maxpool1(input)
        return output
si = Si()

writer = SummaryWriter('logs_maxpool')
step = 0
for data in dataloader:
    imgs,targets = data
    writer.add_images('input-0',imgs,step)
    output = si(imgs) #没有多个channel,进是三维,出也是三维
    writer.add_images('output-0',output,step)
    step = step+1
writer.close()

感觉运行后的结果像是添加的马赛克,哈哈

三 !二 !一 !上卷积效果图

  • 19
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值