欢迎访问宙启技术站
智能推送

使用Python编写的torchvision.modelsmobilenet_v2模块

发布时间:2023-12-12 08:22:48

torchvision.models 模块是 PyTorch 提供的预训练模型的集合,其中包括了 MobileNetV2。MobileNetV2 是一种轻量级的深度卷积神经网络,适用于移动和嵌入式设备上的图像分类任务。下面是使用 Python 编写的一个使用例子。

首先,我们需要导入必要的库和模块:

import torch
import torch.nn as nn
import torchvision.models as models
import torchvision.transforms as transforms
import torchvision.datasets as datasets

接下来,我们需要加载和预处理数据集。这里我们以 ImageNet 数据集为例,使用 torchvision.datasets.ImageNet 类加载数据集,并使用 torchvision.transforms 对数据集进行预处理:

transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

train_dataset = datasets.ImageNet(root='./data', split='train', download=True, transform=transform)
test_dataset = datasets.ImageNet(root='./data', split='val', download=True, transform=transform)

train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=32, shuffle=False)

接下来,我们可以创建一个 MobileNetV2 实例,并加载预训练的权重:

model = models.mobilenet_v2(pretrained=True)

然后,我们可以定义损失函数和优化器:

criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

接下来,我们可以开始训练模型:

num_epochs = 10

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = model.to(device)

for epoch in range(num_epochs):
    model.train()
    running_loss = 0.0
    
    for images, labels in train_loader:
        images = images.to(device)
        labels = labels.to(device)
        
        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        
        running_loss += loss.item()
    
    # 输出每个 epoch 的损失函数值
    print(f'Epoch {epoch+1}/{num_epochs}, Loss: {running_loss/len(train_loader)}')

最后,我们可以在测试集上评估模型的性能:

model.eval()
correct = 0
total = 0

with torch.no_grad():
    for images, labels in test_loader:
        images = images.to(device)
        labels = labels.to(device)
        
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

# 输出模型在测试集上的准确率
print(f'Accuracy on the test set: {100 * correct / total}%')

这就是使用 Python 编写的一个使用 torchvision.models.mobilenet_v2 模块的例子。通过这个例子,我们可以加载预训练的 MobileNetV2 模型,对图像进行分类,并在训练和测试集上评估模型的性能。