【神经网络】02 - 卷积层

02 - 卷积层

概念

卷积层是深度学习神经网络中的一种基本层,用于提取输入数据中的特征。它通过卷积操作对输入数据进行处理,并输出具有更高级别表示的特征图(feature map)。卷积层在图像处理、自然语言处理等领域中都有广泛的应用。卷积分为不同维度,有Conv1d,Conv2d和Conv3d,我们主要学习二维卷积。其主要特点包括:

  1. 局部感知:卷积操作在输入数据的局部区域上进行滑动,每次滑动一定步长并对局部区域应用卷积核,从而实现对局部特征的感知。
  2. 权值共享:卷积核的权重在整个输入数据上共享,这样可以大大减少网络参数数量,降低过拟合的风险,同时提高模型的泛化能力。
  3. 稀疏交互:由于卷积核的尺寸通常远小于输入数据的尺寸,卷积操作在进行特征提取时只关注局部区域的交互,从而降低了计算量。
  4. 多通道处理:卷积层可以同时处理多通道的输入数据,每个通道有自己的卷积核集合,可以提取不同通道的特征信息。

卷积层通常与其他层结合使用,如激活函数层(如ReLU)、池化层(如最大池化、平均池化)和全连接层,构成深度神经网络的基本架构。通过堆叠多个卷积层,可以逐步提取更加抽象和高级别的特征,从而实现对复杂数据的有效建模和学习。

torch.nn.Conv2d是PyTorch中用于创建二维卷积层的类,其构造函数的定义如下:

  • in_channels: 输入数据的通道数,例如RGB图像有3个通道。
  • out_channels: 输出数据的通道数,也就是卷积核的数量,决定了卷积层的输出特征图的深度。
  • kernel_size: 卷积核的大小,可以是一个整数表示正方形卷积核的边长,也可以是一个元组(H, W)表示高度和宽度分别为H和W的卷积核。
  • stride: 卷积操作的步长,默认为1,表示卷积核在输入数据上滑动的步长。
  • padding: 在输入数据的边界周围填充0的层数,默认为0,用于控制卷积操作的输出大小。
  • dilation: 卷积核元素之间的间隔,默认为1,用于控制卷积操作中元素之间的距离。
  • groups: 输入通道分组数,默认为1,用于实现分组卷积,将输入通道分成几个组进行卷积操作。
  • bias: 是否使用偏置项,默认为True,表示卷积层是否包含可学习的偏置。
  • padding_mode: 填充模式,默认为’zeros’,表示使用0填充输入数据的边界。
  • device: 张量所在的设备,默认为None,表示使用当前的默认设备。
  • dtype: 张量的数据类型,默认为None,表示使用当前的默认数据类型。

https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md

示例

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

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


class myModel(nn.Module):
    def __init__(self):
        super(myModel, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)

    def forward(self, x):
        x = self.conv1(x)
        return x


mm = myModel()
print(mm)
writer = SummaryWriter("dataloader")
step = 0
for data in dataloader:
    imgs, labels = data
    output = mm(imgs)
    print(imgs.shape)
    print(output.shape)
    writer.add_images("input", imgs, step)
    # shape当中的-1是占位符,让PyTorch自动计算维度大小
    output = torch.reshape(output, (-1, 3, 30, 30))
    writer.add_images("output", output, step)
    step += 1

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值