본문 바로가기
programming/pytorch

Pytorch - timm, torchvision.models part1)

by cocacola0 2022. 3. 9.
comp_models_1
In [1]:
from IPython.core.display import display, HTML

display(HTML("<style>.container { width:140% !important; }</style>"))

PyTorch Model - timm library, torchvision.models part1)

Basic usage of timm and torchvision.model libraries

In [2]:
import torch
import torch.nn as nn
import torch.nn.functional as F
import timm
from torchvision import models

Timm Library

Select Model

timm.list_models('model name or regular exp', pretrained = True)
In [3]:
all_densenet_models = timm.list_models('*convnext*', pretrained = True)
all_densenet_models
Out[3]:
['convnext_base',
 'convnext_base_384_in22ft1k',
 'convnext_base_in22ft1k',
 'convnext_base_in22k',
 'convnext_large',
 'convnext_large_384_in22ft1k',
 'convnext_large_in22ft1k',
 'convnext_large_in22k',
 'convnext_small',
 'convnext_tiny',
 'convnext_xlarge_384_in22ft1k',
 'convnext_xlarge_in22ft1k',
 'convnext_xlarge_in22k']

Check Model Architecture

model = timm.create_model('convnext_small', pretrained=True)
print(model)
In [4]:
model = timm.create_model('convnext_small', pretrained=True)
# print(model)

Change the last layer of the Model

model = timm.create_model('convnext_small', pretrained=True, num_classes = 100)
In [5]:
model = timm.create_model('convnext_small', pretrained=True, num_classes = 100)
# print(model2)

Testing

model = timm.create_model('convnext_small', pretrained=True, num_classes = 100)
model.eval()
result = model(torch.randn(1,3,224,224))
print(result)
print(result.shape)
In [6]:
model = timm.create_model('convnext_small', pretrained=True, num_classes = 100)
model.eval()
result = model(torch.randn(1,3,224,224))
print(result)
print(result.shape)
tensor([[-2.3662e-02, -7.4553e-02,  8.9252e-02,  4.5729e-02,  2.6010e-02,
          2.4094e-02, -1.8512e-02,  4.8652e-02, -7.9148e-03, -5.5573e-02,
         -1.3695e-02, -1.6126e-02, -3.9224e-02, -6.2003e-02,  2.6231e-02,
          6.7386e-02,  2.3819e-03,  1.4252e-02, -1.3974e-01, -1.2448e-01,
         -2.1656e-02,  7.6230e-02, -2.3944e-02, -3.5192e-02, -4.6354e-02,
         -1.3579e-02, -7.5800e-03,  3.2146e-02, -6.9150e-03,  5.8752e-02,
         -3.9741e-02,  6.0090e-02,  6.0075e-02,  2.0687e-02, -9.0599e-03,
          3.8749e-02,  5.6696e-02,  1.9821e-02, -9.1513e-03, -3.3444e-02,
          7.5849e-02, -2.3506e-02, -1.3826e-02,  8.0334e-03,  4.5473e-02,
         -9.8301e-02, -2.3908e-02, -1.5019e-02,  2.9877e-03,  1.1585e-01,
         -3.2192e-02, -3.4125e-02, -3.4668e-02, -1.4774e-02, -5.2207e-03,
         -1.1825e-02,  4.9037e-02,  4.8691e-02, -8.1260e-02, -5.8519e-02,
         -3.0105e-03, -2.5320e-02,  6.2025e-02,  6.8373e-02,  4.6517e-02,
          2.2243e-02, -1.0411e-01,  1.9704e-02,  2.4856e-02,  2.6043e-02,
          1.6694e-02, -1.6419e-02,  8.3229e-03,  5.3576e-02,  4.2734e-02,
          2.7652e-02, -3.8295e-03, -6.7452e-02,  1.3147e-02,  6.1153e-02,
         -7.3545e-05,  3.8735e-02,  2.7421e-02,  9.3548e-03,  7.2735e-02,
          1.4300e-02, -2.1304e-02,  6.3397e-02, -5.5538e-04,  5.4154e-02,
          2.2753e-02, -9.2972e-02,  4.7925e-03, -1.6918e-02, -5.1844e-03,
         -7.6301e-03, -5.7778e-02,  6.5509e-02,  2.0717e-03, -6.6231e-02]],
       grad_fn=<AddmmBackward0>)
torch.Size([1, 100])

Torchvision models

Basic Template for Model

applicable any libraries based on pytorch

class MyModel(nn.Module):
    def __init__(self):
        super().__init__()
        pass

    def forward(self, x):
        pass

Select Model

Check out the list of models on https://pytorch.org/vision/master/models.html

Check Model Architecture

model = models.densenet161(pretrained = True)
print(model)
In [7]:
model = models.densenet161(pretrained = True)
# print(model)

Change the last layer of the Model

Needs to manually check out the name of last layer : usually either 'fc' or 'classifier'

num_classes = 100
model.classifier = nn.Linear(in_features = model.classifier.in_features,
                                      out_features = num_classes, bias = True)
print(model)
In [8]:
num_classes = 100
model.classifier = nn.Linear(in_features = model.classifier.in_features,
                                      out_features = num_classes, bias = True)
# print(model)

Testing

model = models.densenet161(pretrained = True))
num_classes = 100
model.classifier = nn.Linear(in_features = model.classifier.in_features,
                                      out_features = num_classes, bias = True)
model.eval()
result = model(torch.randn(1,3,224,224))
print(result)
print(result.shape)
In [9]:
model = models.densenet161(pretrained = True)
num_classes = 100
model.classifier = nn.Linear(in_features = model.classifier.in_features,
                                      out_features = num_classes, bias = True)
model.eval()
result = model(torch.randn(1,3,224,224))
print(result)
print(result.shape)
tensor([[-6.2901e-01, -9.3326e-02,  3.0764e-01, -3.9876e-01, -1.0776e+00,
         -2.5174e-01,  5.5095e-01, -8.0655e-01, -3.6235e-01, -1.4524e-03,
          2.8701e-01,  7.0176e-02,  4.9840e-01, -1.6914e-01,  3.5931e-01,
          3.6778e-01,  2.5416e-02, -5.3275e-01,  2.3207e-02,  3.5605e-01,
         -1.0407e-01, -4.7926e-01, -1.5813e-01,  1.4952e-01,  2.1654e-01,
          6.2253e-01,  2.3181e-02,  4.4012e-02, -2.1253e-01,  2.0279e-01,
         -7.2999e-01,  1.1075e-01, -1.7469e-01, -4.1017e-02, -6.8784e-01,
          1.8264e-01,  1.7086e-01,  3.7765e-01,  3.7762e-01, -2.8333e-01,
         -4.6434e-01, -2.4231e-01,  2.4459e-01,  3.7019e-01,  1.9268e-01,
         -4.3335e-01,  1.6836e-01,  9.9497e-02,  2.1062e-02, -6.2166e-01,
         -7.4108e-01, -4.9581e-02, -1.1433e-01, -4.2303e-01, -1.9275e-01,
          1.7361e-01, -2.5386e-01, -5.6183e-01, -2.3228e-01,  1.6434e-01,
         -2.9348e-01, -8.9558e-02, -7.4834e-04,  2.0683e-01,  2.4919e-01,
          2.7467e-01,  3.0369e-01,  4.1775e-01,  8.4553e-02, -1.9007e-01,
          2.5639e-01, -2.2361e-01, -3.5536e-01,  1.9711e-01,  2.3427e-01,
          4.0014e-02,  3.5994e-01, -1.0370e-01,  1.8815e-01, -2.1634e-01,
          2.9653e-01,  7.6269e-02,  6.4522e-01, -1.8169e-01, -2.1026e-01,
         -4.0313e-02, -6.4192e-01,  5.2914e-01,  4.8153e-01, -3.6993e-01,
         -1.3434e-01, -5.8851e-01, -1.0627e-01,  1.0534e-01, -1.2358e-01,
          4.1891e-01,  6.1412e-01, -3.2129e-01, -1.1038e-01,  1.9823e-01]],
       grad_fn=<AddmmBackward0>)
torch.Size([1, 100])

'programming > pytorch' 카테고리의 다른 글

Pytorch - timm, torchvision.models part2)  (0) 2022.03.10
Dataset, DataLoader 심화 2  (0) 2022.03.07
Dataset, DataLoader 심화  (0) 2022.03.05
Dataset, DataLoader Basics  (0) 2022.03.04

댓글