from torchvision import models
24 Pre-trained Network
24.1 Models
24.1.1 List Models
models.list_models()
['alexnet',
'convnext_base',
'convnext_large',
'convnext_small',
'convnext_tiny',
'deeplabv3_mobilenet_v3_large',
'deeplabv3_resnet101',
'deeplabv3_resnet50',
'densenet121',
'densenet161',
'densenet169',
'densenet201',
'efficientnet_b0',
'efficientnet_b1',
'efficientnet_b2',
'efficientnet_b3',
'efficientnet_b4',
'efficientnet_b5',
'efficientnet_b6',
'efficientnet_b7',
'efficientnet_v2_l',
'efficientnet_v2_m',
'efficientnet_v2_s',
'fasterrcnn_mobilenet_v3_large_320_fpn',
'fasterrcnn_mobilenet_v3_large_fpn',
'fasterrcnn_resnet50_fpn',
'fasterrcnn_resnet50_fpn_v2',
'fcn_resnet101',
'fcn_resnet50',
'fcos_resnet50_fpn',
'googlenet',
'inception_v3',
'keypointrcnn_resnet50_fpn',
'lraspp_mobilenet_v3_large',
'maskrcnn_resnet50_fpn',
'maskrcnn_resnet50_fpn_v2',
'maxvit_t',
'mc3_18',
'mnasnet0_5',
'mnasnet0_75',
'mnasnet1_0',
'mnasnet1_3',
'mobilenet_v2',
'mobilenet_v3_large',
'mobilenet_v3_small',
'mvit_v1_b',
'mvit_v2_s',
'quantized_googlenet',
'quantized_inception_v3',
'quantized_mobilenet_v2',
'quantized_mobilenet_v3_large',
'quantized_resnet18',
'quantized_resnet50',
'quantized_resnext101_32x8d',
'quantized_resnext101_64x4d',
'quantized_shufflenet_v2_x0_5',
'quantized_shufflenet_v2_x1_0',
'quantized_shufflenet_v2_x1_5',
'quantized_shufflenet_v2_x2_0',
'r2plus1d_18',
'r3d_18',
'raft_large',
'raft_small',
'regnet_x_16gf',
'regnet_x_1_6gf',
'regnet_x_32gf',
'regnet_x_3_2gf',
'regnet_x_400mf',
'regnet_x_800mf',
'regnet_x_8gf',
'regnet_y_128gf',
'regnet_y_16gf',
'regnet_y_1_6gf',
'regnet_y_32gf',
'regnet_y_3_2gf',
'regnet_y_400mf',
'regnet_y_800mf',
'regnet_y_8gf',
'resnet101',
'resnet152',
'resnet18',
'resnet34',
'resnet50',
'resnext101_32x8d',
'resnext101_64x4d',
'resnext50_32x4d',
'retinanet_resnet50_fpn',
'retinanet_resnet50_fpn_v2',
's3d',
'shufflenet_v2_x0_5',
'shufflenet_v2_x1_0',
'shufflenet_v2_x1_5',
'shufflenet_v2_x2_0',
'squeezenet1_0',
'squeezenet1_1',
'ssd300_vgg16',
'ssdlite320_mobilenet_v3_large',
'swin3d_b',
'swin3d_s',
'swin3d_t',
'swin_b',
'swin_s',
'swin_t',
'swin_v2_b',
'swin_v2_s',
'swin_v2_t',
'vgg11',
'vgg11_bn',
'vgg13',
'vgg13_bn',
'vgg16',
'vgg16_bn',
'vgg19',
'vgg19_bn',
'vit_b_16',
'vit_b_32',
'vit_h_14',
'vit_l_16',
'vit_l_32',
'wide_resnet101_2',
'wide_resnet50_2']
24.1.2 AlexNet (Random Weight)
= models.AlexNet()
alexnet alexnet
AlexNet(
(features): Sequential(
(0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2))
(1): ReLU(inplace=True)
(2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
(3): Conv2d(64, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
(4): ReLU(inplace=True)
(5): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
(6): Conv2d(192, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(7): ReLU(inplace=True)
(8): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(9): ReLU(inplace=True)
(10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(11): ReLU(inplace=True)
(12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(avgpool): AdaptiveAvgPool2d(output_size=(6, 6))
(classifier): Sequential(
(0): Dropout(p=0.5, inplace=False)
(1): Linear(in_features=9216, out_features=4096, bias=True)
(2): ReLU(inplace=True)
(3): Dropout(p=0.5, inplace=False)
(4): Linear(in_features=4096, out_features=4096, bias=True)
(5): ReLU(inplace=True)
(6): Linear(in_features=4096, out_features=1000, bias=True)
)
)
24.1.3 ResNet101
resnet101 function, we’ll now instantiate a 101-layer convolutional neural network.
We’ll pass an argument that will instruct the function to download the weights of resnet101 trained on the ImageNet dataset, with 1.2 million images and 1,000 categories:
= models.resnet101(weights=models.ResNet101_Weights.IMAGENET1K_V1) resnet
What we are seeing here is modules, one per line (aka. Layers):
resnet
ResNet(
(conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
(layer1): Sequential(
(0): Bottleneck(
(conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
(1): Bottleneck(
(conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(2): Bottleneck(
(conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
)
(layer2): Sequential(
(0): Bottleneck(
(conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)
(1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
(1): Bottleneck(
(conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(2): Bottleneck(
(conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(3): Bottleneck(
(conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
)
(layer3): Sequential(
(0): Bottleneck(
(conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)
(1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
(1): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(2): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(3): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(4): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(5): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(6): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(7): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(8): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(9): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(10): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(11): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(12): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(13): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(14): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(15): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(16): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(17): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(18): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(19): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(20): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(21): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(22): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
)
(layer4): Sequential(
(0): Bottleneck(
(conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)
(1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
(1): Bottleneck(
(conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(2): Bottleneck(
(conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
)
(avgpool): AdaptiveAvgPool2d(output_size=(1, 1))
(fc): Linear(in_features=2048, out_features=1000, bias=True)
)
24.2 Torchvision transforms
We defined a preprocess function that will
- Scale the input image to 256 × 256
- Crop the image to 224 × 224 around the center
- Transform it to a tensor (a PyTorch multidimensional array: in this case, a 3D array with color, height, and width)
- Normalize its RGB (red, green, blue) components so that they have defined means and standard deviations.
24.2.1 Preprocess Pipeline
from torchvision import transforms
# Preprocessing Pipeline
= transforms.Compose([
preprocess 256),
transforms.Resize(224),
transforms.CenterCrop(
transforms.ToTensor(),
transforms.Normalize(=[0.485, 0.456, 0.406],
mean=[0.229, 0.224, 0.225]
std )])
24.2.2 Example Input Image
from PIL import Image
= Image.open("../../data/torch/p1ch2/bobby.jpg")
img img
24.2.3 Passing Img to Preprocess
pass the image through our preprocessing pipeline:
= preprocess(img) img_t
Reshape, crop, and normalize the input tensor in a way that the network expects.
import torch
= torch.unsqueeze(img_t, 0) batch_t
24.3 Run (inference)
24.3.1 Put Network in Eval Mode
eval() resnet.
ResNet(
(conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
(layer1): Sequential(
(0): Bottleneck(
(conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
(1): Bottleneck(
(conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(2): Bottleneck(
(conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
)
(layer2): Sequential(
(0): Bottleneck(
(conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)
(1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
(1): Bottleneck(
(conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(2): Bottleneck(
(conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(3): Bottleneck(
(conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
)
(layer3): Sequential(
(0): Bottleneck(
(conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)
(1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
(1): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(2): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(3): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(4): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(5): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(6): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(7): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(8): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(9): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(10): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(11): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(12): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(13): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(14): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(15): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(16): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(17): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(18): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(19): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(20): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(21): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(22): Bottleneck(
(conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
)
(layer4): Sequential(
(0): Bottleneck(
(conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
(downsample): Sequential(
(0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)
(1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
(1): Bottleneck(
(conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
(2): Bottleneck(
(conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace=True)
)
)
(avgpool): AdaptiveAvgPool2d(output_size=(1, 1))
(fc): Linear(in_features=2048, out_features=1000, bias=True)
)
24.3.2 Execute Inference
= resnet(batch_t)
out print(out.shape)
out
torch.Size([1, 1000])
tensor([[-3.4803e+00, -1.6618e+00, -2.4515e+00, -3.2662e+00, -3.2466e+00,
-1.3611e+00, -2.0465e+00, -2.5112e+00, -1.3043e+00, -2.8900e+00,
-1.6862e+00, -1.3055e+00, -2.6129e+00, -2.9645e+00, -2.4300e+00,
-2.8143e+00, -3.3019e+00, -7.9404e-01, -6.5183e-01, -1.2308e+00,
-3.0193e+00, -3.9457e+00, -2.2675e+00, -1.0811e+00, -1.0232e+00,
-1.0442e+00, -3.0918e+00, -2.4613e+00, -2.1964e+00, -3.2354e+00,
-3.3013e+00, -1.8553e+00, -2.0921e+00, -2.1327e+00, -1.9102e+00,
-3.2403e+00, -1.1396e+00, -1.0925e+00, -1.2186e+00, -9.3332e-01,
-4.5093e-01, -1.5489e+00, 1.4161e+00, 1.0870e-01, -1.8442e+00,
-1.4806e+00, 9.6227e-01, -9.9456e-01, -3.0060e+00, -2.7384e+00,
-2.5798e+00, -2.0666e+00, -1.8022e+00, -1.9328e+00, -1.7726e+00,
-1.3041e+00, -4.5848e-01, -2.0537e+00, -3.2804e+00, -5.0451e-01,
-3.8174e-01, -1.1147e+00, -7.3998e-01, -1.4299e+00, -1.4883e+00,
-2.1073e+00, -1.7373e+00, -4.0412e-01, -1.9374e+00, -1.4862e+00,
-1.2102e+00, -1.3223e+00, -1.0832e+00, 7.9207e-02, -4.1344e-01,
-2.7477e-01, -8.5399e-01, 6.0365e-01, -8.9196e-01, 1.4761e+00,
-2.6427e+00, -3.6478e+00, -2.7066e-01, -1.2360e-01, -2.2445e+00,
-2.3425e+00, -1.4430e+00, 2.5264e-01, -1.0588e+00, -2.8812e+00,
-2.5145e+00, -2.2579e+00, 4.1647e-01, -1.3463e+00, -1.6451e-02,
-2.8798e+00, -5.5658e-01, -1.3859e+00, -2.9352e+00, -1.8880e+00,
-4.2244e+00, -2.9742e+00, -2.0298e+00, -2.3869e+00, -2.7324e+00,
-3.9905e+00, -3.6113e+00, -5.4423e-01, -1.0291e+00, -1.8998e+00,
-3.5611e+00, -1.5031e+00, 1.0660e+00, -7.1587e-01, -7.2611e-01,
-2.2173e+00, -2.2616e+00, -5.9990e-01, -1.4349e+00, -2.5965e+00,
-3.9843e+00, -9.4163e-01, -5.3675e-01, -8.4138e-01, -1.1660e+00,
-7.3556e-01, -1.1300e+00, -2.1074e+00, -4.0037e+00, -3.7230e-01,
-2.7179e+00, -2.9849e+00, -1.9127e+00, -1.8412e+00, -1.3001e+00,
-2.2268e+00, -2.0247e+00, -3.1761e+00, -3.2964e+00, -2.7923e+00,
-4.3191e-01, -3.7750e+00, -2.4832e+00, -2.6228e+00, -2.7499e+00,
-2.6306e+00, -3.2714e+00, -4.3249e+00, -4.2451e+00, -3.6207e+00,
-1.1967e+00, 2.3839e+00, 1.8833e+00, 2.2390e+00, 4.9467e+00,
9.9434e-01, 2.9570e+00, 8.5852e-01, 2.2356e+00, 6.1872e+00,
4.2074e+00, 4.6280e+00, 7.5066e+00, 4.3456e+00, 4.8873e+00,
5.8086e+00, 4.0282e+00, 3.5778e+00, 9.5398e+00, 1.0959e+00,
3.3065e+00, 1.9473e+00, -4.7347e-01, 1.4388e+00, 1.8860e+00,
5.5149e+00, 5.6885e+00, 2.1434e+00, 2.5016e+00, 6.2614e-01,
1.9095e+00, 1.4927e+00, 3.4522e+00, 4.0987e-01, 4.2790e+00,
4.3379e+00, 1.2945e+00, 1.6308e+00, 1.1426e+00, 2.1246e+00,
8.6189e-01, 3.0266e+00, 3.5030e+00, 2.7914e+00, 1.8812e+00,
1.3916e-01, 2.0182e+00, 2.6938e+00, 1.0643e+00, 1.9063e+00,
3.5028e+00, 2.2950e+00, 2.5388e+00, 1.3140e+00, 3.5698e+00,
7.7051e+00, 4.3442e+00, 1.5674e+01, 1.2140e+01, 5.2050e+00,
1.9331e+00, 5.4996e+00, 6.1745e+00, 7.5155e+00, 5.8567e+00,
6.9794e+00, 5.6891e+00, 2.6934e+00, 5.3248e+00, 9.8435e+00,
6.4168e+00, 2.4431e+00, 5.6031e+00, 3.4884e+00, 2.0732e+00,
1.3375e+00, 2.5550e+00, 5.7791e+00, 7.5825e-01, 1.0360e+00,
4.8250e+00, 5.9932e+00, 3.9907e+00, -1.7508e+00, 3.6606e+00,
2.8820e+00, 2.8978e+00, 1.3059e+00, 4.2622e+00, 4.0880e+00,
3.4181e+00, 2.3945e+00, 3.1604e-01, 8.7091e-01, 5.0895e+00,
-7.0909e-01, 1.9885e+00, 2.8699e+00, 2.5281e+00, 1.9253e+00,
6.5843e-01, 3.4956e+00, -5.6701e-01, 1.9219e+00, 5.0423e-01,
2.3949e+00, 3.4628e+00, 5.1851e+00, 1.8182e+00, 3.9127e+00,
4.3620e+00, 3.3722e-01, -4.6588e-01, 5.6958e+00, 3.7192e+00,
2.4205e+00, 3.6402e+00, 3.3705e+00, -9.3733e-01, -2.0590e-01,
1.3018e-01, 1.1554e+00, -4.0952e-02, 4.5523e+00, -1.8349e+00,
-2.6543e+00, -1.6859e+00, -6.3751e-01, -1.5596e+00, -2.1529e+00,
-1.0245e+00, 1.5312e+00, 7.6857e-01, -1.8030e+00, 6.9033e-01,
9.1473e-01, -2.0907e+00, -2.1250e+00, -1.5808e+00, -4.7830e+00,
-1.0396e+00, -9.7836e-01, -2.0528e+00, 1.9793e+00, -6.0107e-01,
-2.4964e+00, -1.4914e+00, -3.2041e+00, -1.9067e+00, -5.9215e-01,
-1.0509e+00, 1.3131e+00, -1.5027e+00, -2.0352e+00, 1.3009e+00,
3.9806e-01, -3.5441e-01, 7.1537e-01, -3.0086e-01, -7.6253e-01,
-5.4504e-01, 1.0533e+00, 1.1973e-01, 7.1265e-02, 1.3234e+00,
-2.0051e+00, -1.7127e+00, 1.1415e+00, -4.3746e-01, 2.9573e-01,
-1.4572e+00, -2.6234e+00, -2.5400e+00, -2.4128e-01, -2.3629e+00,
-1.5560e+00, -2.5256e+00, -8.0395e-01, 1.5960e-01, -2.8029e+00,
-1.8937e+00, -9.4297e-01, -3.8988e-01, -4.6732e-01, -7.8799e-01,
-2.5103e+00, -1.8726e+00, -2.1138e+00, -5.5075e-01, 1.8876e-01,
-2.0678e+00, -1.7942e+00, -2.4776e+00, -3.8875e+00, -4.4214e+00,
-2.1606e+00, -1.9960e+00, -3.7195e+00, -1.8627e+00, -3.3882e+00,
-2.0034e+00, -2.2823e+00, -8.3602e-01, -5.1364e-01, -2.9197e+00,
-1.6728e+00, -2.5686e-01, -2.7734e+00, -1.7911e+00, 1.1283e-01,
-2.1215e+00, -1.5402e+00, -1.2457e+00, -9.6399e-01, -2.4953e+00,
-1.3973e+00, -3.8589e+00, -4.3189e+00, -1.5287e+00, -1.9420e+00,
-3.0008e+00, -2.9597e+00, -4.8460e+00, -2.4737e+00, -1.4287e+00,
-2.9093e+00, -1.2882e+00, -6.0873e-01, -2.8312e+00, -1.8754e+00,
-2.3758e+00, -3.4176e+00, -2.5520e+00, -3.8709e+00, -4.4702e+00,
-3.5587e+00, -9.4389e-01, -2.3503e+00, -2.0270e+00, -1.8470e+00,
-3.2897e+00, -3.4712e+00, -2.8471e+00, -1.9893e+00, -3.7441e+00,
-1.1865e+00, -2.8282e+00, 2.2839e-01, -1.3325e-01, -3.1260e-01,
1.4785e-01, 1.7180e+00, 1.8871e+00, -3.1302e+00, -3.7345e+00,
-2.6754e+00, -6.7742e-01, -8.4727e-01, -1.3179e+00, 4.7847e-01,
-2.2918e+00, 4.7733e+00, 1.5100e+00, -1.5956e+00, 3.3496e+00,
3.0611e+00, 1.5253e+00, 6.8673e-01, 1.2918e+00, 1.6387e+00,
1.0631e-01, 1.3420e+00, 5.2416e-02, 1.0270e+00, -4.6863e-01,
-1.3585e+00, 5.7503e-01, 2.8775e-01, 2.8255e+00, 2.1875e+00,
1.8301e+00, 1.3566e+00, 1.0992e+00, 2.3172e+00, 6.4046e+00,
1.8630e+00, 6.0024e-01, -1.4953e+00, -1.9144e+00, -2.6436e+00,
1.5186e+00, -4.8838e-01, -1.0529e-01, 1.9803e+00, -1.7358e+00,
3.7236e-01, 1.6658e+00, 7.8257e-01, 2.1721e+00, -1.4210e+00,
-2.4550e+00, 4.6637e-01, 3.3418e+00, -2.8537e-01, 1.1941e-01,
1.1450e+00, -1.3834e+00, 1.5737e+00, -2.1716e+00, -4.2427e-01,
-1.4805e+00, -2.1745e+00, 2.7962e+00, 2.4990e+00, 1.9237e-01,
4.7498e-01, -1.9682e+00, -1.6105e+00, -7.3869e-01, -1.1794e+00,
-2.9531e-01, -1.4142e+00, 2.2398e+00, -4.3380e-01, -8.6286e-01,
4.0300e-01, -1.4318e+00, -3.1364e-01, 3.4846e+00, 4.3202e-01,
4.5058e-01, -1.1090e+00, 2.2513e-01, -2.6651e+00, -2.8278e+00,
-6.5790e-01, -3.0889e-01, 8.2097e-01, 1.8005e-01, -4.2284e-01,
-5.8541e-01, -2.7820e-01, 1.6590e+00, 8.7699e-02, -4.6728e-01,
1.1241e+00, 2.2742e+00, -1.0448e+00, 9.4819e-01, 9.9525e-01,
-2.5969e+00, -5.5236e-01, 2.1583e+00, -9.2215e-01, 4.7107e-02,
-3.8016e-01, 1.5210e+00, -1.0433e+00, 1.9041e+00, 1.4741e+00,
-4.3896e+00, -1.6206e-01, -1.5697e-01, -7.3738e-01, 1.8179e+00,
3.3264e+00, 7.3696e-01, -7.6419e-01, 1.5898e+00, 1.9445e+00,
1.2725e+00, -1.5624e+00, 2.2197e+00, 9.9570e-01, -6.3256e-01,
-1.4160e+00, 1.6144e+00, 4.5530e-02, 9.0732e-01, 9.5069e-01,
5.3562e-01, 4.4124e-01, 1.0358e+00, 6.5593e-01, 3.3626e+00,
-1.0299e+00, -2.8939e+00, -7.0227e-01, -8.1103e-01, 7.0547e+00,
-3.3097e+00, 1.3230e+00, 1.6968e+00, 3.7732e+00, -1.1723e+00,
5.7985e-01, -1.8231e+00, -1.3483e+00, 4.1487e-01, 2.6429e+00,
1.4418e+00, 7.9635e-01, 4.8719e+00, 1.5457e+00, -3.5932e+00,
-2.2285e+00, -1.3850e+00, -8.9728e-01, 2.1657e+00, 2.0583e+00,
-8.9567e-01, -1.7835e+00, -1.4516e+00, 1.0497e+00, -7.6032e-01,
-1.4353e+00, 4.7010e-01, 8.7255e-01, 6.7030e-01, -1.1902e+00,
-1.4175e+00, -8.4839e-01, 1.1901e+00, -1.8283e+00, 2.4775e+00,
3.4005e-01, -1.7652e+00, -9.1973e-01, 2.9893e+00, 2.2373e+00,
-8.1442e-01, -1.9843e+00, 9.2510e-01, -2.1452e+00, 1.8891e-02,
2.5441e-01, -1.1333e-01, -6.2533e-01, 8.0225e-01, 4.0010e+00,
-1.1935e+00, 2.6455e+00, -1.7860e+00, 7.5864e-01, 5.1593e-01,
2.4363e-03, -7.6759e-01, 4.8149e-01, 1.3055e+00, 8.0364e-01,
-6.1873e-01, 4.6973e-02, 2.6322e-01, -2.1400e+00, -1.3908e+00,
-4.0180e-02, -4.2920e-01, 4.6767e-01, 1.3024e+00, 7.5817e-01,
9.9859e-02, -1.0072e-01, -8.5241e-01, 8.6250e-01, 6.9518e-01,
2.1217e+00, 7.1267e-01, -1.9782e-01, 2.3986e+00, 1.8734e+00,
1.0993e+00, 1.0336e+00, 1.4353e+00, -4.9213e-02, -1.3295e-01,
-1.7147e+00, -1.2590e+00, -1.3166e+00, -3.4476e+00, 5.9193e-01,
1.0995e+00, 1.0987e-02, -3.7005e-01, -4.5369e-01, -4.2330e-01,
-1.5137e+00, 2.7933e-01, -2.0776e-01, 3.2132e+00, 1.8063e+00,
-1.5186e+00, 2.8835e+00, -7.4290e-01, 3.2128e-02, -7.0115e-02,
-1.0103e+00, 1.1795e+00, 5.9283e-01, 1.2191e-01, -3.4571e+00,
1.3048e+00, 3.9847e-01, -1.2731e+00, -1.2927e+00, -1.6408e+00,
1.9229e+00, 4.1586e-02, -9.8907e-01, 6.7141e-01, 2.8807e+00,
1.6977e+00, 2.2304e-01, -8.1440e-01, -2.0507e+00, 1.7015e+00,
-2.0312e-01, 7.4630e-01, 1.5227e+00, -1.4377e+00, -1.1784e+00,
5.1375e-01, -6.4234e-01, 3.8710e-02, 2.6664e+00, -1.6256e+00,
-3.3457e+00, 2.1520e+00, 8.6618e-01, 1.3850e+00, -3.4029e-01,
1.8385e-01, 1.4680e+00, -1.0961e+00, 1.8217e+00, -1.2748e+00,
-2.1175e+00, -8.4857e-01, -5.3657e-01, -1.2562e+00, 1.1329e+00,
-1.4191e+00, -7.6893e-01, -3.4133e-01, 2.1594e+00, -2.1836e-01,
-1.8166e+00, 9.8039e-02, 1.7366e+00, 1.6465e-01, 7.7770e-01,
4.7226e+00, -7.3754e-01, -1.6683e+00, -8.1360e-01, -1.4618e+00,
3.4068e+00, 5.3348e-01, -3.1106e-01, -5.0764e-01, 3.0037e-01,
1.8626e+00, -1.1852e+00, -2.0411e+00, -9.6967e-02, -7.1424e-01,
-2.5433e+00, -3.4143e-02, 7.6702e-01, -1.7948e+00, 2.9510e-01,
-1.0903e+00, 1.5320e+00, 2.8823e+00, 5.1182e-01, -7.6857e-01,
-9.0145e-01, -1.7196e+00, -1.0044e+00, 9.1568e-01, -9.2979e-02,
-2.3068e+00, 2.2911e+00, 9.5719e-01, 1.9917e+00, -1.6980e+00,
2.6118e+00, 3.7953e+00, 7.1091e-01, -2.2826e-03, -1.0275e+00,
2.1824e+00, 1.4127e+00, 4.7933e-01, -1.3249e+00, -9.0533e-01,
5.8118e-01, -6.0400e-01, 5.1156e-01, 1.1511e+00, 9.5682e-01,
2.7826e+00, -3.0976e+00, 3.5563e+00, -1.6181e-01, -4.6196e-02,
-2.0769e+00, -1.4204e+00, 2.9824e+00, -4.8723e-01, 2.1408e-01,
-1.3643e-01, 2.2942e+00, 3.4084e-01, 9.9796e-01, -1.1452e+00,
3.3055e+00, -1.8049e+00, 3.2445e+00, -1.6493e-01, 1.3805e+00,
6.5878e-01, 4.6122e-01, -7.8640e-01, 3.8983e-01, 1.9974e+00,
4.0911e-01, 2.4161e+00, -1.9111e+00, 8.1042e-02, 2.2694e+00,
-1.6680e+00, -7.0304e-01, 1.4299e+00, 1.4234e-02, 7.9249e-01,
2.9637e+00, -9.4825e-01, -1.3366e+00, 2.6750e-01, 2.3589e+00,
1.8983e+00, 1.8345e+00, 8.5127e-01, 4.2841e+00, 4.8082e-01,
-1.4365e+00, -4.8286e-01, 3.0412e+00, -8.2025e-01, 3.3065e+00,
-6.5939e-01, -2.6282e+00, -3.1888e+00, -2.9725e+00, 1.2156e+00,
5.6016e+00, 3.0274e-01, -3.1681e+00, 2.5582e+00, -3.3199e-01,
1.4820e-01, 2.3601e+00, -1.4552e+00, 3.3269e+00, -3.3744e+00,
-6.4104e-01, 1.1680e+00, -2.6107e+00, 1.6885e+00, -1.5028e+00,
-2.6845e+00, -3.6659e+00, -1.7394e+00, 1.1231e+00, 2.0104e+00,
-1.4943e-01, 1.3057e+00, 1.2092e+00, 2.6647e+00, -1.7969e+00,
-1.8525e+00, 1.5488e+00, -2.0861e+00, -2.3154e+00, 9.9215e-01,
-3.7871e+00, -1.1176e+00, 9.0636e-01, -3.2947e-01, -3.4544e+00,
2.0940e+00, 5.4372e-01, 6.0876e-01, -1.3066e-01, 7.9443e-01,
7.9938e-01, 1.0587e+00, -1.8372e+00, 2.8466e-01, -1.1158e+00,
8.0787e-01, 1.0870e+00, 8.9547e+00, -8.9419e-01, -9.3959e-01,
1.0806e+00, -4.1462e-01, -1.7524e+00, 9.1856e-02, 1.8185e-01,
-1.3849e+00, 8.8831e-01, -4.1253e-01, -7.7844e-01, -3.1265e+00,
-3.8734e-01, 1.8115e-01, -2.2122e+00, 2.8848e+00, 4.5000e-01,
1.4854e+00, -3.4138e+00, 1.4939e+00, -2.5266e+00, -2.9228e+00,
-7.6507e-01, 2.8269e+00, -1.1918e+00, -6.2602e-01, 3.6187e+00,
1.1527e+00, 1.1860e+00, 3.4149e+00, 9.2981e-01, -1.1376e+00,
1.0391e+00, 1.8575e-01, -7.4427e-01, -2.9312e+00, -1.6815e-01,
1.5624e+00, -4.5063e-01, 1.5997e+00, 1.0128e+00, -1.3146e+00,
-1.8426e+00, -4.7445e-01, 5.8992e-01, 2.3850e+00, 5.2548e-01,
-1.3760e+00, -2.3240e+00, -7.6861e-01, 1.2772e+00, 2.9579e+00,
-2.7968e-01, -5.9378e-01, -2.4310e-02, -7.2352e-01, -5.9498e-02,
2.7550e+00, 2.9499e-01, -1.1396e+00, -1.4785e+00, -4.3375e+00,
-3.2104e-01, -3.2125e-01, -2.0806e+00, 3.7004e-01, -1.4368e+00,
-6.1700e-01, -2.0341e+00, -8.6155e-01, -4.0387e-01, -3.2359e-01,
-1.8287e+00, -1.7554e+00, -6.5639e-01, 6.7694e-01, 3.7156e+00,
2.1207e+00, 4.0970e+00, 1.7257e+00, 8.5265e-01, 1.2722e+00,
1.0563e+00, 1.3809e+00, 1.2871e+00, -7.5314e-01, 2.2593e+00,
1.1952e-01, -7.3866e-01, 1.0060e+00, 8.5880e-01, -6.6744e-01,
-3.2016e-01, -1.5605e+00, 2.0461e+00, 2.4740e+00, 2.2464e-01,
7.4987e-01, 3.8843e-02, -1.7622e+00, 1.9534e+00, 4.5175e-01,
1.2086e+00, 7.3219e-01, -1.0001e+00, 1.2820e-01, -3.7380e-01,
9.6212e-02, 3.2060e+00, 6.5022e-01, -1.1252e-01, 8.9641e-01,
-5.2856e-02, -1.1584e+00, 1.4922e-01, 3.7309e-01, 8.7084e-01,
-1.9354e+00, 1.0733e-01, -1.5175e+00, -1.8582e+00, -3.8437e+00,
1.8629e-01, -2.9438e+00, 5.4171e-01, -7.8057e-01, -2.6016e+00,
-4.4594e+00, 5.5604e-01, -1.3140e+00, -3.8407e+00, -7.5988e-01,
-5.7457e-01, -2.5448e+00, 2.3831e+00, 6.1367e-01, 4.8295e-01,
2.8674e+00, -3.7442e+00, 1.5085e+00, -3.2500e+00, -2.4894e+00,
-3.3541e-01, 1.2856e-01, -1.1355e+00, 3.3969e+00, 4.4584e+00]],
grad_fn=<AddmmBackward0>)
24.3.3 Label file
with open('../../data/torch/p1ch2/imagenet_classes.txt') as f:
= [line.strip() for line in f.readlines()]
labels
5] labels[:
['tench, Tinca tinca',
'goldfish, Carassius auratus',
'great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias',
'tiger shark, Galeocerdo cuvieri',
'hammerhead, hammerhead shark']
- we need to determine the index corresponding to the maximum score in the out tensor we obtained previously.
- using the max function in PyTorch, which outputs the maximum value in a tensor as well as the indices where that maximum value occurred:
= torch.max(out,1)
_, index
print(index) # a one-element, one-dimensional tensor
= index.item()
index_num index_num
tensor([207])
207
24.4 Get Prediction
= torch.nn.functional.softmax(out, dim=1)[0] * 100
percentage
def get_pred(index):
return f"Prediction: {labels[index.item()]} (Prob = {percentage[index.item()].item():.2f}%)"
print(get_pred(index))
Prediction: golden retriever (Prob = 96.29%)
sorts the values in ascending or descending order and also provides the indices of the sorted values in the original array:
= torch.sort(out, descending=True)
_, indices
0][:5] # Top 5 indices[
tensor([207, 208, 219, 168, 852])
for idx in indices[0][:5]:
print(get_pred(idx))
Prediction: golden retriever (Prob = 96.29%)
Prediction: Labrador retriever (Prob = 2.81%)
Prediction: cocker spaniel, English cocker spaniel, cocker (Prob = 0.28%)
Prediction: redbone (Prob = 0.21%)
Prediction: tennis ball (Prob = 0.12%)
for idx in indices[0][:5]] [(labels[idx], percentage[idx].item())
[('golden retriever', 96.29335021972656),
('Labrador retriever', 2.808124303817749),
('cocker spaniel, English cocker spaniel, cocker', 0.28267377614974976),
('redbone', 0.20863202214241028),
('tennis ball', 0.11621604114770889)]