Maison  >  Article  >  Périphériques technologiques  >  Étapes de base pour créer un réseau neuronal convolutif à l'aide de PyTorch

Étapes de base pour créer un réseau neuronal convolutif à l'aide de PyTorch

PHPz
PHPzavant
2024-01-24 09:21:10470parcourir

Étapes de base pour créer un réseau neuronal convolutif à laide de PyTorch

Convolutional Neural Network (CNN) est un modèle d'apprentissage profond largement utilisé dans les tâches de vision par ordinateur. Comparé aux réseaux neuronaux entièrement connectés, CNN dispose de moins de paramètres et de capacités d'extraction de fonctionnalités plus puissantes, et fonctionne bien dans des tâches telles que la classification d'images, la détection de cibles et la segmentation d'images. Ci-dessous, nous expliquerons comment créer un modèle CNN de base.

Convolutional Neural Network (CNN) est un modèle d'apprentissage en profondeur avec plusieurs couches convolutives, des couches de pooling, des fonctions d'activation et des couches entièrement connectées. La couche convolutive est le composant principal de CNN et est utilisée pour extraire les caractéristiques de l'image d'entrée. La couche de pooling peut réduire la taille de la carte des caractéristiques et préserver les principales caractéristiques de l'image. La fonction d'activation introduit une transformation non linéaire pour augmenter la capacité d'expression du modèle. La couche entièrement connectée convertit la carte de caractéristiques en un résultat de sortie. En combinant ces composants, nous pouvons construire un réseau neuronal convolutif de base. CNN fonctionne bien dans des tâches telles que la classification d'images, la détection de cibles et la génération d'images, et est largement utilisé dans le domaine de la vision par ordinateur.

Deuxièmement, pour la structure de CNN, les paramètres de chaque couche de convolution et couche de pooling doivent être déterminés. Ces paramètres incluent la taille du noyau de convolution, le nombre de noyaux de convolution et la taille du noyau de pooling. Dans le même temps, il est également nécessaire de déterminer les dimensions des données d’entrée et les dimensions des données de sortie. Le choix de ces paramètres doit généralement être déterminé expérimentalement. Une approche courante consiste à commencer par créer un modèle CNN simple, puis à ajuster progressivement les paramètres jusqu'à ce que des performances optimales soient atteintes.

Lors de la formation d'un modèle CNN, nous devons définir la fonction de perte et l'optimiseur. En règle générale, la fonction de perte d'entropie croisée est largement utilisée, tandis que l'optimiseur de descente de gradient stochastique est également un choix courant. Pendant le processus de formation, nous saisissons les données de formation dans le modèle CNN par lots et calculons la valeur de perte en fonction de la fonction de perte. Ensuite, utilisez l'optimiseur pour mettre à jour les paramètres du modèle afin de réduire la valeur de perte. En règle générale, plusieurs itérations sont nécessaires pour terminer la formation, chaque itération introduisant les données de formation dans le modèle par lots jusqu'à ce qu'un nombre prédéterminé d'époques de formation soit atteint ou que certains critères de performance soient remplis.

Ce qui suit est un exemple de code pour créer un réseau neuronal convolutionnel (CNN) de base à l'aide de PyTorch :

import torch
import torch.nn as nn

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5) # 3个输入通道,6个输出通道,5x5的卷积核
        self.pool = nn.MaxPool2d(2, 2) # 2x2的最大池化层
        self.conv2 = nn.Conv2d(6, 16, 5) # 6个输入通道,16个输出通道,5x5的卷积核
        self.fc1 = nn.Linear(16 * 5 * 5, 120) # 全连接层1,输入大小为16x5x5,输出大小为120
        self.fc2 = nn.Linear(120, 84) # 全连接层2,输入大小为120,输出大小为84
        self.fc3 = nn.Linear(84, 10) # 全连接层3,输入大小为84,输出大小为10(10个类别)

    def forward(self, x):
        x = self.pool(torch.relu(self.conv1(x))) # 第一层卷积+激活函数+池化
        x = self.pool(torch.relu(self.conv2(x))) # 第二层卷积+激活函数+池化
        x = x.view(-1, 16 * 5 * 5) # 将特征图展开成一维向量
        x = torch.relu(self.fc1(x)) # 第一层全连接+激活函数
        x = torch.relu(self.fc2(x)) # 第二层全连接+激活函数
        x = self.fc3(x) # 第三层全连接
        return x

Le code ci-dessus définit une classe nommée Net, qui hérite de nn.Module. Cette classe contient des couches convolutives, des couches de pooling et des couches entièrement connectées, ainsi que la méthode forward, qui est utilisée pour définir le processus de propagation vers l'avant du modèle. Dans la méthode __init__, nous définissons deux couches convolutives, trois couches entièrement connectées et une couche de pooling. Dans la méthode directe, nous appelons ces couches dans l'ordre et utilisons la fonction d'activation ReLU pour transformer de manière non linéaire les sorties des couches convolutives et des couches entièrement connectées. Enfin, nous renvoyons la sortie de la dernière couche entièrement connectée comme prédiction du modèle. Pour ajouter, l'entrée de ce modèle CNN doit être un tenseur à quatre dimensions ayant la forme de (batch_size, canaux, hauteur, largeur). Parmi eux, batch_size est la taille du lot des données d'entrée, les canaux sont le nombre de canaux des données d'entrée, et la hauteur et la largeur sont respectivement la hauteur et la largeur des données d'entrée. Dans cet exemple, les données d'entrée doivent être une image couleur RVB avec un nombre de canaux de 3.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer