当前位置:网站首页>Base du réseau neuronal de convolution d'apprentissage profond (CNN)
Base du réseau neuronal de convolution d'apprentissage profond (CNN)
2022-07-05 19:43:00 【Quand la pluie tombe】
Catalogue des articles
Le traitement d'images à l'aide d'un réseau neuronal entièrement connecté pose deux problèmes:
- Grande quantité de données à traiter,Faible efficacité
Si on s'occupait d'un 1000×1000 Image en pixels,Les paramètres sont les suivants::
1000×1000×3=3,000,000
.Une telle quantité de données consomme beaucoup de ressources
- Il est difficile de conserver les caractéristiques originales de l'image lors de l'ajustement dimensionnel ,La précision du traitement de l'image n'est pas élevée
Si un cercle est1,Aucun cercle n'est0,Les différentes positions des cercles produisent des représentations de données complètement différentes. Mais du point de vue de l'image, ,Contenu de l'image(Nature)Il n'y a pas eu de changement.,Il y a eu un changement de position..Donc quand on déplace des objets dans l'image, Les résultats obtenus avec des ascenseurs entièrement connectés varieront considérablement ,Ceci n'est pas conforme aux exigences du traitement d'image.
1. CNNComposition du réseau
CNN Le réseau s'inspire du système nerveux visuel humain , Les principes de la vision humaine :En commençant par l'ingestion du signal original(Pixels d'ingestion pupillaire Pixels),Ensuite, faites le traitement préliminaire(Certaines cellules du cortex cérébral trouvent des bords et des directions),Puis abstrait(Le cerveau décide,La forme de l'objet devant,C'est circulaire),Et puis plus abstrait( Le cerveau décide en outre que l'objet est un visage humain ).Voici un exemple de reconnaissance faciale par le cerveau humain:
CNN Le réseau se compose principalement de trois parties: :Couche de convolution、 Composition de la couche de mise en commun et de la couche de raccordement complète , Où la couche de convolution est chargée d'extraire les caractéristiques locales de l'image ;La couche de mise en commun est utilisée pour réduire considérablement l'échelle des paramètres(Dimension réduite); Une partie de la couche de connexion complète qui ressemble à un réseau neuronal artificiel ,Utilisé pour produire les résultats souhaités.
ToutCNNLa structure du réseau est illustrée ci - dessous:
2. Couche de convolution
La couche de convolution est le module central du réseau neuronal de convolution , Le but de la couche de convolution est d'extraire les caractéristiques de la carte des caractéristiques d'entrée ,Comme le montre la figure ci - dessous, Le noyau de convolution peut extraire l'information de bord de l'image .
2.1 Méthode de calcul de la convolution
Comment calculer la convolution? ?
.L'opération de convolution consiste essentiellement à faire un produit ponctuel entre la zone locale du filtre et les données d'entrée .
Méthode de calcul du coin supérieur gauche :
D'autres points peuvent être calculés de la même manière , Obtenir le résultat final de la convolution ,
Le dernier point est calculé comme suit: :
2.2 padding
Dans le processus de convolution décrit ci - dessus , Le graphique des caractéristiques est beaucoup plus petit que le graphique original , On peut faire le tour de l'image originale padding, Pour s'assurer que la taille de la carte caractéristique reste la même pendant le processus de convolution .
2.3 stride
Par paliers1 Pour déplacer le noyau de convolution , Les caractéristiques calculées sont les suivantes: :
Si nous mettonsstrideAugmentation,Par exemple, régler à2, Il est également possible d'extraire des graphiques de caractéristiques ,Comme le montre la figure ci - dessous:
2.4 Convolution multicanale
En réalité, les images sont composées de plusieurs canaux , Comment calculer la convolution ?
La méthode de calcul est la suivante:: Lorsque l'entrée a plusieurs canaux (channel)Heure( Par exemple, une image peut avoir RGB Trois canaux), Le noyau convolutif doit avoir le même channelNombre,Chaque noyau de convolution channel Correspondance avec la couche d'entrée channel Convolution,Chaque channel Les résultats de convolution sont additionnés bitwise pour obtenir le résultat final Feature Map
2.5 Convolution du noyau Multi - convolution
Comment calculer s'il y a plus d'un noyau de convolution ? Quand il y a plusieurs noyaux de convolution , Chaque noyau de convolution apprend des caractéristiques différentes , La génération correspondante contient plusieurs channel De Feature Map, Par exemple, il y a deux filter,Alors... output Il y en a deux. channel.
2.6 Taille de la carte des caractéristiques
La taille des caractéristiques de sortie dépend des paramètres suivants : * size:Noyau de convolution/Taille du filtre, Normalement sélectionné comme impair ,Par exemple, il y a1 * 1, 3 * 3, 5 * 5 * padding: Mode de remplissage zéro * stride:Étapes
La méthode de calcul est la suivante: :
Le diagramme des caractéristiques d'entrée est 5x5,Le noyau de convolution est3x3,Pluspadding Pour1, La taille de sortie est :
Comme le montre la figure ci - dessous:
Intf.keras Réalisation et utilisation du noyau de convolution moyen
tf.keras.layers.Conv2D(
filters, kernel_size, strides=(1, 1), padding='valid',
activation=None
)
Les principaux paramètres sont décrits comme suit::
3. Couche de mise en commun(Pooling)
La couche de mise en commun se dirige vers une réduction de la dimension d'entrée de la couche réseau suivante , Réduire la taille du modèle ,Augmenter la vitesse de calcul,Et a augmentéFeature Map Robustesse,Prévention de l'ajustement excessif,
Il échantillonne principalement les caractéristiques apprises de la couche de convolution (subsampling)Traitement,Il se compose principalement de deux
3.1 Mise en commun maximale
Max Pooling, Prend la valeur maximale dans la fenêtre comme sortie , Cette méthode est largement utilisée .
Intf.keras La méthode mise en œuvre dans :
tf.keras.layers.MaxPool2D(
pool_size=(2, 2), strides=None, padding='valid'
)
Paramètres:
pool_size: Taille de la fenêtre de mise en commun
strides: L'étape du déplacement de la fenêtre ,Par défaut1
padding: Si le remplissage est effectué , La valeur par défaut n'est pas remplie
3.2 Mise en commun moyenne
Avg Pooling, Prenez la moyenne de toutes les valeurs dans la fenêtre comme sortie
Intf.keras La méthode de mise en commun est la suivante: :
tf.keras.layers.AveragePooling2D(
pool_size=(2, 2), strides=None, padding='valid'
)
4. Couche de connexion complète
La couche de connexion complète est située à CNN Fin du réseau , Après extraction des caractéristiques de la couche de convolution et réduction des dimensions de la couche de mise en commun , L'opération de conversion d'un graphique caractéristique en vecteur unidimensionnel dans une couche de connexion complète pour la classification ou la régression .
Intf.keras Utilisation de la couche de connexion moyenne complète tf.keras.dense
Réalisation.
5.Construction d'un réseau neuronal convolutif
Nous construisons un réseau neuronal convolutif mnist Traitement sur un ensemble de données ,Comme le montre la figure ci - dessous:LeNet-5C'est un réseau neuronal convolutif plus simple, Image 2D saisie, Passe d'abord par deux couches de convolution ,Couche de mise en commun,Et à travers toute la couche de connexion,Utilisation finalesoftmaxClassification comme couche de sortie.
Importer un kit:
import tensorflow as tf
# Ensemble de données
from tensorflow.keras.datasets import mnist
5.1 Chargement des données
Compatible avec le cas du réseau neuronal ,Charger d'abord l'ensemble de données:
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
5.2 Traitement des données
Les exigences d'entrée pour les réseaux neuronaux convolutifs sont :N
H
W
C
,Nombre d'images,Hauteur de l'image, Largeur de l'image et canal de l'image , Parce que c'est un graphique gris ,Le canal est1.
# Traitement des données:num,h,w,c
# Données de l'ensemble de formation
train_images = tf.reshape(train_images, (train_images.shape[0],train_images.shape[1],train_images.shape[2], 1))
print(train_images.shape)
# Données de l'ensemble d'essai
test_images = tf.reshape(test_images, (test_images.shape[0],test_images.shape[1],test_images.shape[2], 1))
Les résultats sont les suivants::
(60000, 28, 28, 1)
5.3 Modélisation
Lenet-5 Image 2D entrée du modèle , Passe d'abord par deux couches de convolution ,Couche de mise en commun,Et à travers toute la couche de connexion,Utilisation finalesoftmaxClassification comme couche de sortie, Le modèle est construit comme suit :
# Construction de modèles
net = tf.keras.models.Sequential([
# Couche de convolution:6- Oui.5*5Noyau de convolution,Activation ouisigmoid
tf.keras.layers.Conv2D(filters=6,kernel_size=5,activation='sigmoid',input_shape= (28,28,1)),
# Mise en commun maximale
tf.keras.layers.MaxPool2D(pool_size=2, strides=2),
# Couche de convolution:16- Oui.5*5Noyau de convolution,Activation ouisigmoid
tf.keras.layers.Conv2D(filters=16,kernel_size=5,activation='sigmoid'),
# Mise en commun maximale
tf.keras.layers.MaxPool2D(pool_size=2, strides=2),
# Dimension ajustée à 1Données dimensionnelles
tf.keras.layers.Flatten(),
# Lamination complète,Activationsigmoid
tf.keras.layers.Dense(120,activation='sigmoid'),
# Lamination complète,Activationsigmoid
tf.keras.layers.Dense(84,activation='sigmoid'),
# Lamination complète,Activationsoftmax
tf.keras.layers.Dense(10,activation='softmax')
])
Nous passonsnet.summary()Voir la structure du réseau:
Model: "sequential_11"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_4 (Conv2D) (None, 24, 24, 6) 156
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 12, 12, 6) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 8, 8, 16) 2416
_________________________________________________________________
max_pooling2d_5 (MaxPooling2 (None, 4, 4, 16) 0
_________________________________________________________________
flatten_2 (Flatten) (None, 256) 0
_________________________________________________________________
dense_25 (Dense) (None, 120) 30840
_________________________________________________________________
dense_26 (Dense) (None, 84) 10164
dense_27 (Dense) (None, 10) 850
=================================================================
Total params: 44,426
Trainable params: 44,426
Non-trainable params: 0
______________________________________________________________
La taille de l'image d'entrée numérique manuscrite est 28x28x1,Comme le montre la figure ci - dessous:, Regardons les paramètres de la couche de convolution inférieure :
conv1 Le noyau de convolution est 5x5x1,Le nombre de noyaux de convolution est6, Chaque noyau de convolution a un bias, Donc la quantité de paramètre est :5x5x1x6+6=156.
conv2 Le noyau de convolution est 5x5x6,Le nombre de noyaux de convolution est16, Chaque noyau de convolution a un bias, Donc la quantité de paramètre est :5x5x6x16+16 = 2416.
5.4 Compilation du modèle
Définir les fonctions d'optimisation et de perte:
# Optimizer
optimizer = tf.keras.optimizers.SGD(learning_rate=0.9)
# Compilation du modèle:Fonction de perte, Optimiseurs et indicateurs d'évaluation
net.compile(optimizer=optimizer,
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
5.5 Formation sur modèle
Formation sur modèle:
# Formation sur modèle
net.fit(train_images, train_labels, epochs=5, validation_split=0.1)
Processus de formation:
Epoch 1/5
1688/1688 [==============================] - 10s 6ms/step - loss: 0.8255 - accuracy: 0.6990 - val_loss: 0.1458 - val_accuracy: 0.9543
Epoch 2/5
1688/1688 [==============================] - 10s 6ms/step - loss: 0.1268 - accuracy: 0.9606 - val_loss: 0.0878 - val_accuracy: 0.9717
Epoch 3/5
1688/1688 [==============================] - 10s 6ms/step - loss: 0.1054 - accuracy: 0.9664 - val_loss: 0.1025 - val_accuracy: 0.9688
Epoch 4/5
1688/1688 [==============================] - 11s 6ms/step - loss: 0.0810 - accuracy: 0.9742 - val_loss: 0.0656 - val_accuracy: 0.9807
Epoch 5/5
1688/1688 [==============================] - 11s 6ms/step - loss: 0.0732 - accuracy: 0.9765 - val_loss: 0.0702 - val_accuracy: 0.9807
5.6 Évaluation du modèle
# Évaluation du modèle
score = net.evaluate(test_images, test_labels, verbose=1)
print('Test accuracy:', score[1])
Les résultats sont les suivants::
313/313 [==============================] - 1s 2ms/step - loss: 0.0689 - accuracy: 0.9780
Test accuracy: 0.9779999852180481
Comparé à l'utilisation d'un réseau entièrement connecté , Beaucoup plus de précision .
边栏推荐
- HAC cluster modifying administrator user password
- 城链科技数字化创新战略峰会圆满召开
- 如何在2022年更明智地应用智能合约?
- 浮动元素与父级、兄弟盒子的关系
- Webuploader file upload drag upload progress monitoring type control upload result monitoring control
- Bitcoinwin (BCW) was invited to attend Hanoi traders fair 2022
- Successful entry into Baidu, 35K monthly salary, 2022 Android development interview answer
- MySql中的longtext字段的返回问题及解决
- JAD installation, configuration and integration idea
- Two pits exported using easyexcel template (map empty data columns are disordered and nested objects are not supported)
猜你喜欢
Successful entry into Baidu, 35K monthly salary, 2022 Android development interview answer
MMO project learning 1: preheating
Worthy of being a boss, byte Daniel spent eight months on another masterpiece
Android面试,android音视频开发
【硬核干货】数据分析哪家强?选Pandas还是选SQL
力扣 1200. 最小绝对差
Django使用mysqlclient服务连接并写入数据库的操作过程
Tutoriel de téléchargement et d'installation du progiciel fuzor 2020
Zhongang Mining: analysis of the current market supply situation of the global fluorite industry in 2022
Reflection and imagination on the notation like tool
随机推荐
Concept and syntax of function
Float. The specific meaning of the return value of floattorawintbits is to convert float into byte array
40000 word Wenshuo operator new & operator delete
gst-launch的-v参数
vagrant2.2.6支持virtualbox6.1版本
Fuzor 2020軟件安裝包下載及安裝教程
【C语言】字符串函数及模拟实现strlen&&strcpy&&strcat&&strcmp
测试外包公司怎么样?
Zhongang Mining: analysis of the current market supply situation of the global fluorite industry in 2022
No matter how busy you are, you can't forget safety
Debezium系列之:记录mariadb数据库删除多张临时表debezium解析到的消息以及解决方法
UWB超宽带定位技术,实时厘米级高精度定位应用,超宽带传输技术
How about testing outsourcing companies?
通过POI追加数据到excel中小案例
众昂矿业:2022年全球萤石行业市场供给现状分析
How to convert word into PDF? Word to PDF simple way to share!
深度学习 卷积神经网络(CNN)基础
Reflection and imagination on the notation like tool
What does software testing do? What are the requirements for learning?
How MySQL queries and modifies JSON data