pytorch学习笔记---conv2d

本文介绍了如何使用PyTorch库手动实现一个不考虑batchsize和channel维度的卷积函数,通过矩阵乘法计算卷积输出。作者提供了详细的代码示例,展示了如何计算给定输入和kernel的卷积结果。
摘要由CSDN通过智能技术生成

手写conv2d卷积不考虑batchsize和channel

参考b站up主deep_thoughs

import torch
import torch.nn as nn
import torch.nn.functional as F
import math
import numpy as np

# 不考虑BatchSize 维度 和channel 维度
def ManualConv2d_MatrixCaculation(input , kernel , bias = 0 , stride = 1 , padding = 0 ):
      if(padding > 0):
           input = F.pad(input , (padding ,padding ,padding ,padding))
      input_h , input_w = input.shape
      kernel_h , kernel_w = kernel.shape
    
      output_w  = (math.floor((input_h - kernel_h)/stride) + 1) # conv output wide 
      output_h  = (math.floor((input_w - kernel_w)/stride) + 1) # conv output height
      output = torch.zeros(output_h , output_w) # initial output matrix 
     
      for i in range(0  , input_h - kernel_h + 1 , stride): # 对高度维进行遍历
           for j in range(0 , input_w - kernel_w + 1 , stride): # 对宽度维进行遍历
                region = input[i : i + kernel_w , j : j + kernel_w] # kernel 正在覆盖的区域
                output[int(i/stride) , int(j/stride)] = torch.sum(region * kernel) + bias 
      return output 

input = torch.randn(5 ,5)
kernnel = torch.randn(3 ,3)

mat_mul_conv_output = ManualConv2d_MatrixCaculation(input , kernnel , padding= 1)
print(" mat_mul_conv_output : " , mat_mul_conv_output

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值