À propos du fait que le résumé de la torche peut être vraiment utilisé lors de la construction d'un modèle avec Pytorch

introduction

Je construis mon propre modèle et avant de le connecter à la couche entièrement connectée, je demande toujours: "Quelles sont les caractéristiques de l'entrée?" Vous pouvez comprendre la structure du modèle en tapant souvent print (model), mais vous ne pouvez pas vérifier la taille de la carte des caractéristiques. C'est là que le «résumé de la torche» est utile.

Qui est le résumé de la torche?

En termes simples, c'est un "vous pouvez voir la taille de la carte des caractéristiques".

Comment utiliser le résumé de la torche

Tout d'abord, faites un modèle

Cette fois, j'ai fait le modèle simple suivant. Je n'ai pas écrit avant de le classer.

Pliage ➡︎BN➡︎ReLU➡︎pool Pliage ➡︎BN➡︎ReLU➡︎pool Pliage ➡︎ Global Average Pooling

                                                                                                                                     
import torch
import torch.nn as nn
   
class SimpleCNN(nn.Module):     
    def __init__(self):
        super(SimpleCNN,self).__init__()
 
        self.conv1 = nn.Conv2d(3,16,kernel_size=3,stride=1)
        self.bn1 = nn.BatchNorm2d(16)
        self.relu = nn.ReLU(inplace=True)
        self.maxpool = nn.MaxPool2d((2,2))
        self.conv2 = nn.Conv2d(16,32,kernel_size=3,stride=1)
        self.bn2 = nn.BatchNorm2d(32)
        self.conv3 = nn.Conv2d(32,64,kernel_size=3,stride=1)
        self.gap = nn.AdaptiveMaxPool2d(1)
  
    def forward(self,x):  
        x = self.conv1(x)
        x = self.bn1(x)
        x = self.relu(x) 
        x = self.maxpool(x)
        x = self.conv2(x)
        x = self.bn2(x)
        x = self.relu(x)
        x = self.maxpool(x)
        x = self.conv3(x)
        x = self.gap(x)
   
        return x

Résumé de l'installation de la torche

pip install torchsummary

torche résumé Comment utiliser

from torchsummary import summary
model = SimpleCNN()  
summary(model,(3,224,224)) # summary(model,(channels,H,W))

Cette fois, j'essaie de supposer une taille d'entrée d'image de 224x224. Si vous voulez essayer d'autres résolutions, modifiez les valeurs de «H» et «W».

Sortie récapitulative


----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv2d-1         [-1, 16, 222, 222]             448
       BatchNorm2d-2         [-1, 16, 222, 222]              32
              ReLU-3         [-1, 16, 222, 222]               0
         MaxPool2d-4         [-1, 16, 111, 111]               0
            Conv2d-5         [-1, 32, 109, 109]           4,640
       BatchNorm2d-6         [-1, 32, 109, 109]              64
              ReLU-7         [-1, 32, 109, 109]               0
         MaxPool2d-8           [-1, 32, 54, 54]               0
            Conv2d-9           [-1, 64, 52, 52]          18,496
AdaptiveMaxPool2d-10             [-1, 64, 1, 1]               0
================================================================
Total params: 23,680
Trainable params: 23,680
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.57
Forward/backward pass size (MB): 30.29
Params size (MB): 0.09
Estimated Total Size (MB): 30.95
----------------------------------------------------------------

Il est assez pratique de pouvoir vérifier la forme de sortie. Je suis reconnaissant qu'il compte également le nombre de paramètres.

À la fin

torchsummary est pratique, veuillez donc l'utiliser.

Recommended Posts

À propos du fait que le résumé de la torche peut être vraiment utilisé lors de la construction d'un modèle avec Pytorch
À propos du fait que l'objet recompilé peut être utilisé pour le modèle re.match
À propos du contenu de wscript lors de la création d'un environnement en langage D comme celui avec Waf
Un minuteur (ticker) qui peut être utilisé sur le terrain (peut être utilisé n'importe où)
Comprendre les probabilités et les statistiques qui peuvent être utilisées pour la gestion des progrès avec un programme python
Un mémo lors de la création d'un environnement qui peut être débogué avec Lambda @ Edge pour le moment
[Python] Code qui peut être écrit avec la mort cérébrale au début lors du scraping en tant que débutant
Un modèle qui identifie la guitare avec fast.ai
À propos de localhost: 4040 n'est pas accessible après l'exécution de Spark avec Docker
Formatez les données DataFrame avec Pytorch sous une forme pouvant être entraînée avec NN
Convertir des images du SDK FlyCapture en un formulaire pouvant être utilisé avec openCV
Notes sur les connaissances Python utilisables avec AtCoder
[Python] Introduction au scraping WEB | Résumé des méthodes pouvant être utilisées avec webdriver
[Django] À propos des utilisateurs pouvant être utilisés sur un modèle
[Django] Noms de champs pouvant être utilisés pour le modèle utilisateur, l'enregistrement des utilisateurs et les méthodes de connexion
[Atcoder] [C ++] J'ai fait un outil d'automatisation de test qui peut être utilisé pendant le concours
Récapitulatif du format des formats qui peuvent être sérialisés avec gensim
Goroutine (contrôle parallèle) utilisable sur le terrain
Goroutine utilisable sur le terrain (édition errgroup.Group)
Scripts pouvant être utilisés lors de l'utilisation de Bottle en Python
Précautions à prendre lors de la construction d'un environnement PYTHON
J'ai étudié le prétraitement qui peut être fait avec PyCaret
Faisons un diagramme sur lequel on peut cliquer avec IPython
J'ai essayé de l'étendre pour que la base de données puisse être utilisée avec le logiciel d'analyse de Wiire
[Python] Un programme qui trouve le nombre maximum de jouets pouvant être achetés avec votre argent
Créez une Spinbox qui peut être affichée en binaire avec Tkinter
J'ai fait un shuffle qui peut être réinitialisé (inversé) avec Python
Créez un graphique des devises qui peut être déplacé avec Plotly (2)
Créez une Spinbox pouvant être affichée dans HEX avec Tkinter
Module standard Python utilisable en ligne de commande
Créez un graphique des devises qui peut être déplacé avec Plotly (1)
Construction d'un environnement distribué avec la série Raspberry PI (Partie 1: Résumé de la disponibilité des clients sans disque par modèle)
J'ai créé un modèle de projet Python générique
Module de traitement du signal acoustique qui peut être utilisé avec Python-Sounddevice ASIO [Application]
Le panneau Web LXC qui peut faire fonctionner LXC avec un navigateur était merveilleux
Masquer l'avertissement selon lequel zsh peut être utilisé par défaut sur Mac
Créez une application Web qui peut être facilement visualisée avec Plotly Dash
Optimisation mathématique pour un travail gratuit avec Python + PuLP
J'ai fait une simple minuterie qui peut être démarrée depuis le terminal
Python-Sound device Module de traitement du signal acoustique ASIO [Basic]
Je voulais créer rapidement un serveur de messagerie utilisable librement avec postfix + dovecot sur EC2
[Python3] Code qui peut être utilisé lorsque vous souhaitez découper une image dans une taille spécifique
Il semble que l'annulation de toutes les commandes enfants puisse être utilisée pour annuler toutes les commandes parentes (commandes spéciales) avec l'API bitflyer
[Python] Création d'un outil qui peut lister, sélectionner et exécuter des fichiers python avec tkinter et à propos de la partie qui a été interceptée
Article qui peut être une ressource humaine qui comprend et maîtrise le mécanisme de l'API (avec du code Python)
[Python3] Code qui peut être utilisé lorsque vous souhaitez modifier l'extension d'une image à la fois
Notes pour créer des figures pouvant être publiées dans des revues avec matplotlib
À propos du fait que softmax n'est pas nécessaire à la fin du modèle de Torchvision.
Si "ne peut pas être utilisé lors de la création d'un objet PIE" apparaît dans make
J'ai essayé de résumer les opérations susceptibles d'être utilisées avec numpy-stl
Comment installer la bibliothèque Python qui peut être utilisée par les sociétés pharmaceutiques
[Hackason] À propos de la création d'un outil pouvant être imprimé sur Raspberry Pi [Outil pratique]
J'ai essayé de créer un chargeur de démarrage x86 qui peut démarrer vmlinux avec Rust
Module de grattage "Gaspacho" qui peut être utilisé plus facilement que Beautiful Soup