深度可分离卷积(depthwise separable conv)
第一步先进行逐通道卷积(Depthwise Convolution);
第二步进行逐点卷积(Pointwise Convolution)。
import torch
import torch.nn as nn
# 定义深度可分离卷积模块
class DepthwiseSeparableConv(nn.Module):
def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0):
super(DepthwiseSeparableConv, self).__init__()
self.depthwise = nn.Conv2d(in_channels, in_channels, kernel_size, stride, padding, groups=in_channels)
self.pointwise = nn.Conv2d(in_channels, out_channels, 1)
def forward(self, x):
x = self.depthwise(x)
x = self.pointwise(x)
return x
# 创建一个示例模型
class MyModel(nn.Module):
def __init__(self):
super(MyModel, self).__init__()
self.conv1 = DepthwiseSeparableConv(3, 64, 3, 1, 1)
self.conv2 = DepthwiseSeparableConv(64, 128, 3, 1, 1)
self.fc = nn.Linear(128 * 32 * 32, 10)
def forward(self, x):
x = self.conv1(x)
x = self.conv2(x)
x = x.view(x.size(0), -1)
x = self.fc(x)
return x
# 创建模型实例
model = MyModel()
# 打印模型结构
print(model)