深度可分离卷积优化平均池化

文章目录


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("Average pooling output:", avg_pool_output)

print("Depthwise convolution output shape:", dw_conv_output.shape)
# print("Depthwise convolution output:", dw_conv_output)


# 比较结果
print("Are the outputs equal?", torch.allclose(avg_pool_output, dw_conv_output, atol=1e-6))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值