模型子包包含以下模型体系结构的定义:
目录
torchvision.models
Alexnet
VGG
ResNet
SqueezeNet
DenseNet
Inception v3
GoogLeNet
可以通过调用其构造函数来构造具有随机权重的模型:
import torchvision.models as models
resnet18 = models.resnet18()
alexnet = models.alexnet()
vgg16 = models.vgg16()
squeezenet = models.squeezenet1_0()
densenet = models.densenet161()
inception = models.inception_v3()
googlenet = models.googlenet()
可以使用 PyTorch torch.utils.model_zoo 提供预先训练的模型。 这些可以通过传递 pretrained = True 来构造:
import torchvision.models as models
resnet18 = models.resnet18(pretrained=True)
alexnet = models.alexnet(pretrained=True)
squeezenet = models.squeezenet1_0(pretrained=True)
vgg16 = models.vgg16(pretrained=True)
densenet = models.densenet161(pretrained=True)
inception = models.inception_v3(pretrained=True)
googlenet = models.googlenet(pretrained=True)
对预先训练的模型进行实例化将其权重下载到缓存目录。 可以使用TORCH_MODEL_ZOO 环境变量设置此目录。 有关详细信息,请参阅 torch.utils.model_zoo.load_url()。
某些模型使用具有不同 training 和 evaluation 行为的模块,例如批量标准化。 要在这些模式之间切换,根据需要使用model.train()或 model.eval()。 有关详细信息,请参阅 train() 或 eval()。
所有预先训练的模型都希望输入图像以相同的方式归一化,即小批量的3通道RGB图像形状(3 x H x W),其中H和W预计至少为224。图像必须加载到[0,1]的范围,然后使用 mean = [0.485,0.456,0.406] 和 std = [0.229,0.224,0.225] 归一化。 可以使用以下转换来规范化:
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
这种规范化的一个例子可以在这里的 imagenet 示例 中找到
# Data loading code
traindir = os.path.join(args.data, 'train')
valdir = os.path.join(args.data, 'val')
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
train_loader = torch.utils.data.DataLoader(
datasets.ImageFolder(traindir, transforms.Compose([
transforms.RandomSizedCrop(224), # 图片随机裁剪为224*224大小
transforms.RandomHorizontalFlip(), # 以概率0.5对图片进行水平翻转
transforms.ToTensor(),
normalize,
])),
附:Pytorch:transforms的二十二个方法 对图片进行tranforms操作,增强数据的灵活性
ImageNet 1-crop error rates (224x224)
Network | Top-1 error | Top-5 error |
---|---|---|
AlexNet | 43.45 | 20.91 |
VGG-11 | 30.98 | 11.37 |
VGG-13 | 30.07 | 10.75 |
VGG-16 | 28.41 | 9.62 |
VGG-19 | 27.62 | 9.12 |
VGG-11 with batch normalization | 29.62 | 10.19 |
VGG-13 with batch normalization | 28.45 | 9.63 |
VGG-16 with batch normalization | 26.63 | 8.50 |
VGG-19 with batch normalization | 25.76 | 8.15 |
ResNet-18 | 30.24 | 10.92 |
ResNet-34 | 26.70 | 8.58 |
ResNet-50 | 23.85 | 7.13 |
ResNet-101 | 22.63 | 6.44 |
ResNet-152 | 21.69 | 5.94 |
SqueezeNet 1.0 | 41.90 | 19.58 |
SqueezeNet 1.1 | 41.81 | 19.38 |
Densenet-121 | 25.35 | 7.83 |
Densenet-169 | 24.00 | 7.00 |
Densenet-201 | 22.80 | 6.43 |
Densenet-161 | 22.35 | 6.20 |
Inception v3 | 22.55 | 6.44 |
GoogleNet | 30.22 | 10.47 |
torchvision.models.alexnet(pretrained=False, **kwargs)
AlexNet模型架构来自“One weird trick for parallelizing convolutional neural networks”论文。
Parameters: | pretrained (bool) – 如果为 True, 返回在ImageNet上预先训练的模型。 |
---|
torchvision.models.vgg11(pretrained=False, **kwargs)
VGG 11-layer model (configuration “A”)
torchvision.models.vgg11_bn(pretrained=False, **kwargs)
VGG 11-layer model (configuration “A”) with batch normalization
torchvision.models.vgg13(pretrained=False, **kwargs)
VGG 13-layer model (configuration “B”)
torchvision.models.vgg13_bn(pretrained=False, **kwargs)
VGG 13-layer model (configuration “B”) with batch normalization
torchvision.models.vgg16(pretrained=False, **kwargs)
VGG 16-layer model (configuration “D”)
torchvision.models.vgg16_bn(pretrained=False, **kwargs)
VGG 16-layer model (configuration “D”) with batch normalization
torchvision.models.vgg19(pretrained=False, **kwargs)
VGG 19-layer model (configuration “E”)
torchvision.models.vgg19_bn(pretrained=False, **kwargs)
VGG 19-layer model (configuration ‘E’) with batch normalization
torchvision.models.resnet18(pretrained=False, **kwargs)
Constructs a ResNet-18 model.
torchvision.models.resnet34(pretrained=False, **kwargs)
Constructs a ResNet-34 model.
torchvision.models.resnet50(pretrained=False, **kwargs)
Constructs a ResNet-50 model.
torchvision.models.resnet101(pretrained=False, **kwargs)
Constructs a ResNet-101 model.
torchvision.models.resnet152(pretrained=False, **kwargs)
Constructs a ResNet-152 model.
torchvision.models.squeezenet1_0(pretrained=False, **kwargs)
SqueezeNet 模型结构来自 “SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size” 这篇文章。
torchvision.models.squeezenet1_1(pretrained=False, **kwargs)
来自 SqueezeNet 官方的 SqueezeNet 1.1 模型,与 SqueezeNet 1.0 相比,SqueezeNet 1.1 的计算量减少了2.4倍,参数略少,而且没有牺牲精度。
torchvision.models.densenet121(pretrained=False, **kwargs)
Densenet-121 model from “Densely Connected Convolutional Networks”
torchvision.models.densenet169(pretrained=False, **kwargs)
Densenet-169 model from “Densely Connected Convolutional Networks”
torchvision.models.densenet161(pretrained=False, **kwargs)
Densenet-161 model from “Densely Connected Convolutional Networks”
torchvision.models.densenet201(pretrained=False, **kwargs)
Densenet-201 model from “Densely Connected Convolutional Networks”
torchvision.models.inception_v3(pretrained=False, **kwargs)
Inception v3 model architecture from “Rethinking the Inception Architecture for Computer Vision”.
重要提示:与其他网络模型相比,inception_v3需要尺寸为N x 3 x 299 x 299的张量,请确保图像大小相应。
Parameters: |
|
---|
torchvision.models.googlenet(pretrained=False, **kwargs)
GoogLeNet (Inception v1) model architecture from “Going Deeper with Convolutions”.