【Pytorch】8.torch.nn.conv2d

这个函数和我们之前提到的【Pytorch】6.torch.nn.functional.conv2d的使用的作用相似,都是完成CV领域的卷积操作,这里就不在过多赘述

torch.nn.conv2d的使用

打开pytorch的官方文档,我们可以看到
在这里插入图片描述
在这里插入图片描述
torch.nn.conv2d包含了若干参数

  • in_channels:代表输入的通道数
  • out_channels:代表输出的通道数
  • kernel_size:代表卷积核的大小,既可以是int类型,也可以是tuple元组类型,比如(2,5)代表卷积核大小为两行五列
  • stride:代表卷积每次的步长
  • padding:代表输入层的边缘填充
  • padding_mode:代表边缘填充的规则,默认为用0填充
  • dilation:代表膨胀,默认为1
    我们也可以通过官方的这个链接link来对每个参数进行了解

具体的使用方法为

# With square kernels and equal stride
m = nn.Conv2d(16, 33, 3, stride=2)
# non-square kernels and unequal stride and with padding
m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))
# non-square kernels and unequal stride and with padding and dilation
m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2), dilation=(3, 1))
input = torch.randn(20, 16, 50, 100)
output = m(input)

具体用例

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

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

dataLoader = DataLoader(dataset, batch_size=64, shuffle=True)


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

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


net = Net()

writer = SummaryWriter(log_dir='./logs')

i = 0
for data in dataLoader:
    img, target = data
    output = net.forward(img)
    # print(output.shape)
    writer.add_images('input', img, i)

    # -1是一个占位符,让Pytorch自动计算维度大小
    output = torch.reshape(output,(-1, 3, 30, 30))
    # 无法直接传入6通道,只能3通道
    writer.add_images("output", output, i)
    i = i + 1

writer.close()

需要注意一下几点

  • 再使用TensorBoard进行可视化时,需要使用writer.add_images而不是writer.add_image要加s
  • 再使用writer进行可视化时,tensor格式只支持3通道,如果是其他通道数,需要使用torch.reshape来进行通道数转换

在这里插入图片描述
因为output上是64个图片为一组,通道数为6,所以转化为通道数为3的话,有64*2的图片

下面附上输入输出通道数与像素数的计算方法
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值