卷积操作torch.nn中的conv2d的使用

一、官方文档

torch.nnhttps://pytorch.org/docs/stable/nn.html#convolution-layers

nn.Conv2d用的比较多

二、手动计算卷积操作

三、编写代码

 导入相关包

import torch
import torch.nn.functional as F

初始化输入图像 input

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]])

初始化卷积核 kernel

kernel = torch.tensor([[1, 2, 1],
                       [0, 1, 0],
                       [2, 1, 0]])

打印input和kernel的shape

print(input.shape)
print(kernel.shape)

输出结果如下

torch.Size([5, 5])
torch.Size([3, 3])

但是官网给的说明,要求input sizeoutput size如下(C是通道数) 

所以接下来要修改input和kernel的size

input = torch.reshape(input, (1, 1, 5, 5))
kernel = torch.reshape(kernel, (1, 1, 3, 3))

再次打印二者的size,符合要求:

torch.Size([1, 1, 5, 5])
torch.Size([1, 1, 3, 3])

最后,使用conv2d进行卷积操作

output = F.conv2d(input, kernel, stride=1)

完整代码如下:

# -*- coding: utf-8 -*-
# @Time: 2022/6/29 0029 11:05
# @Author: Wang
# @File: demo7_nn_conv.py

import torch
import torch.nn.functional as F

# 初始化输入图像
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]])
# 初始化卷积核
kernel = torch.tensor([[1, 2, 1],
                       [0, 1, 0],
                       [2, 1, 0]])

# 修改input 和 kernel的shape格式
input = torch.reshape(input, (1, 1, 5, 5))
kernel = torch.reshape(kernel, (1, 1, 3, 3))
# 打印出shape
print(input.shape)
print(kernel.shape)

# 进行卷积操作
output = F.conv2d(input, kernel, stride=1)

# 输出卷积操作结果
print(output)

卷积操作结果如下: 

tensor([[[[10, 12, 12],
          [18, 16, 16],
          [13,  9,  3]]]])

发现,通过代码进行卷积操作的结果,和我们手动计算的结果是一致的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叁拾舞

你的鼓励将是我最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值