AlexNet_v2:Python编写的CNN模型
发布时间:2024-01-10 21:26:24
AlexNet_v2是一个卷积神经网络(CNN)模型,是AlexNet的改进版本。它在2012年的ImageNet竞赛中名列前茅,以其在图像分类任务上的卓越表现而著名。
AlexNet_v2模型在Python中的实现如下:
import torch
import torch.nn as nn
class AlexNet_v2(nn.Module):
def __init__(self, num_classes=1000):
super(AlexNet_v2, self).__init__()
self.features = nn.Sequential(
nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
nn.Conv2d(96, 256, kernel_size=5, padding=2),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
nn.Conv2d(256, 384, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(384, 384, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(384, 256, kernel_size=3, padding=1),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2),
)
self.avgpool = nn.AdaptiveAvgPool2d((6, 6))
self.classifier = nn.Sequential(
nn.Dropout(),
nn.Linear(256 * 6 * 6, 4096),
nn.ReLU(inplace=True),
nn.Dropout(),
nn.Linear(4096, 4096),
nn.ReLU(inplace=True),
nn.Linear(4096, num_classes),
)
def forward(self, x):
x = self.features(x)
x = self.avgpool(x)
x = torch.flatten(x, 1)
x = self.classifier(x)
return x
该模型由多个卷积层、池化层和全连接层组成。其中,特征提取部分由卷积层和池化层构成,将输入图像依次经过这些层以提取图像的特征。然后,特征图被送入全连接层进行分类。
使用例子:
import torch
from torchvision import transforms
from PIL import Image
# 加载预训练模型
model = AlexNet_v2()
model.load_state_dict(torch.load('alexnet_v2.pth'))
model.eval()
# 预处理输入图像
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
# 加载并预测图像
image = Image.open('cat.jpg')
image = transform(image)
image = image.unsqueeze(0)
output = model(image)
_, predicted = torch.max(output, 1)
# 输出预测结果
print(predicted)
上述例子首先会加载预训练好的AlexNet_v2模型,然后使用预处理步骤对输入图像进行处理,接着利用模型对处理后的图像进行预测,并输出预测结果。
总结来说,AlexNet_v2是一个在图像分类任务上表现卓越的CNN模型,我们可以使用它来进行图像分类等相关任务。
