mobilenetv1的pytorch代码
时间: 2025-01-03 10:40:35 浏览: 39
### MobileNetV1 的 PyTorch 实现
以下是 MobileNetV1 在 PyTorch 中的一个简单实现:
```python
import torch.nn as nn
import torch
class DepthwiseSeparableConv(nn.Module):
def __init__(self, in_channels, out_channels, stride=1):
super(DepthwiseSeparableConv, self).__init__()
# Depthwise convolution
self.depthwise = nn.Conv2d(in_channels, in_channels, kernel_size=3, padding=1, groups=in_channels, stride=stride, bias=False)
self.bn1 = nn.BatchNorm2d(in_channels)
# Pointwise convolution
self.pointwise = nn.Conv2d(in_channels, out_channels, kernel_size=1, bias=False)
self.bn2 = nn.BatchNorm2d(out_channels)
self.relu = nn.ReLU(inplace=True)
def forward(self, x):
x = self.depthwise(x)
x = self.bn1(x)
x = self.relu(x)
x = self.pointwise(x)
x = self.bn2(x)
x = self.relu(x)
return x
class MobileNetV1(nn.Module):
def __init__(num_classes=1000):
super(MobileNetV1, self).__init__()
layers = [
nn.Conv2d(3, 32, kernel_size=3, stride=2, padding=1, bias=False),
nn.BatchNorm2d(32),
nn.ReLU(inplace=True),
DepthwiseSeparableConv(32, 64, stride=1),
DepthwiseSeparableConv(64, 128, stride=2),
DepthwiseSeparableConv(128, 128, stride=1),
DepthwiseSeparableConv(128, 256, stride=2),
DepthwiseSeparableConv(256, 256, stride=1),
DepthwiseSeparableConv(256, 512, stride=2),
DepthwiseSeparableConv(512, 512, stride=1),
DepthwiseSeparableConv(512, 512, stride=1),
DepthwiseSeparableConv(512, 512, stride=1),
DepthwiseSeparableConv(512, 512, stride=1),
DepthwiseSeparableConv(512, 512, stride=1),
DepthwiseSeparableConv(512, 1024, stride=2),
DepthwiseSeparableConv(1024, 1024, stride=1),
nn.AvgPool2d(kernel_size=7)
]
classifier = [
nn.Linear(1024, num_classes)
]
self.features = nn.Sequential(*layers)
self.classifier = nn.Sequential(*classifier)
def forward(self, x):
x = self.features(x)
x = x.view(-1, 1024)
x = self.classifier(x)
return x
```
此代码定义了一个标准的 MobileNet V1 架构,其中包括深度可分离卷积层[^1]。
阅读全文
相关推荐


















