使用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 模型,对图像进行分类,并在训练和测试集上评估模型的性能。
