1、常规卷积
参数量计算,bias忽略不计
N = 4 × 3 × 3 × 3 = 108
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
input_tensor = torch.randn(1, 3, 32, 32)
avg_pool = nn.AvgPool2d(kernel_size=2, stride=2, padding=0)
avg_pool_output = avg_pool(input_tensor)
def depthwise_conv(input_tensor, kernel_size, stride, padding, groups):
weight = torch.ones((input_tensor.size(1), 1, kernel_size, kernel_size)) * (1 / (kernel_size * kernel_size))
conv = nn.Conv2d(in_channels=input_tensor.size(1), out_channels=input_tensor.size(1), kernel_size=kernel_size,
stride=stride, padding=padding, groups=groups, bias=False)
conv.weight.data = weight
return conv(input_tensor)
dw_conv_output = depthwise_conv(input_tensor, kernel_size=2, stride=2, padding=0, groups=input_tensor.size(1))
print("Input tensor shape:", input_tensor.shape)
print("Average pooling output shape:", avg_pool_output.shape)
print("Depthwise convolution output shape:", dw_conv_output.shape)
print("Are the outputs equal?", torch.allclose(avg_pool_output, dw_conv_output, atol=1e-6))