Pytorch框架学习记录7——卷积层

Pytorch框架学习记录7——卷积层

1. torch.nn.Conv2d 介绍

torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode=‘zeros’, device=None, dtype=None)

参数

  • in_channels ( int ) – 输入图像中的通道数
  • out_channels ( int ) – 卷积产生的通道数
  • kernel_size ( int or tuple ) – 卷积核的大小
  • stride ( int or tuple , optional ) – 卷积的步幅。默认值:1
  • padding ( int , tuplestr , optional ) – 添加到输入的所有四个边的填充。默认值:0
  • padding_mode (字符串*,*可选) – 'zeros', 'reflect', 'replicate''circular'. 默认:'zeros'
  • dilation ( int or tuple , optional ) – 内核元素之间的间距。默认值:1
  • groups ( int , optional ) – 从输入通道到输出通道的阻塞连接数。默认值:1
  • bias ( bool , optional ) – If True,向输出添加可学习的偏差。默认:True

输入图像高度和宽度与输出图像的高度和宽度计算公式:
H o u t = ⌊ ( H i n + 2 × p a d d i n g [ 0 ] − d i l a t i o n [ 0 ] × ( k e r n e l _ s i z e [ 0 ] − 1 ) − 1 ) / s t r i d e [ 0 ] + 1 ⌋ H_{out}=⌊(H_{in}+2×padding[0]−dilation[0]×(kernel\_size[0]−1)−1)/stride[0]+1⌋ Hout=⌊(Hin+2×padding[0]dilation[0]×(kernel_size[0]1)1)/stride[0]+1

W o u t = ⌊ ( W i n + 2 × p a d d i n g [ 1 ] − d i l a t i o n [ 1 ] × ( k e r n e l _ s i z e [ 1 ] − 1 ) − 1 ) / s t r i d e [ 1 ] + 1 ⌋ W_{out}=⌊(W_{in}+2×padding[1]−dilation[1]×(kernel\_size[1]−1)−1)/stride[1]+1⌋ Wout=⌊(Win+2×padding[1]dilation[1]×(kernel_size[1]1)1)/stride[1]+1

这里的output_channels就代表着卷积核的个数,卷积核的个数=输出频道的个数

2. 实例

下面的实例就使用之前学习到的方法构建了一个简单的卷积网络,并对输入输出图像进行展示对比。

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

dataset = torchvision.datasets.CIFAR10(root='./dataset', train=False, transform=torchvision.transforms.ToTensor(),
                                       download=True)

dataloader = DataLoader(dataset=dataset, batch_size=64, num_workers=0)


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

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


writer = SummaryWriter("logs")
test = Test()
step = 0
for data in dataloader:
    imgs, target = data
    output = test(imgs)
    print(imgs.shape)
    print(output.shape)
    output = torch.reshape(output, (-1, 3, 30, 30))

    writer.add_images("input", imgs, step)
    writer.add_images("output", output, step)
    step += 1

原始图像:
在这里插入图片描述

卷积后的图像:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yozu_Roo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值