La couche linéaire est l'une des couches les plus couramment utilisées dans l'apprentissage profond et joue un rôle important dans les réseaux de neurones. Il est largement utilisé dans des tâches telles que la classification d’images, la détection d’objets et la reconnaissance vocale. Cet article se concentrera sur le rôle des couches linéaires sur les tenseurs multidimensionnels.
Tout d’abord, passons en revue les principes de base des couches linéaires. Pour un tenseur d'entrée x, la formule de calcul de la couche linéaire est la suivante :
y=Wx+b
où, W et b sont respectivement les paramètres de la couche linéaire, et la forme de W est (n_out, n_in), b La forme est (n_out,). n_in représente la taille du tenseur d'entrée et n_out représente la taille du tenseur de sortie. Supposons que le tenseur d'entrée soit un tenseur unidimensionnel x∈R^n_in et que le tenseur de sortie soit également un tenseur unidimensionnel y∈R^n_out. Dans la couche linéaire, le tenseur d'entrée est transformé linéairement par la matrice de poids W, plus le vecteur de biais b, pour obtenir le tenseur de sortie y. Cette transformation linéaire peut être exprimée par y = Wx + b. Parmi eux, chaque ligne de W représente le vecteur de poids d'un neurone de sortie de la couche linéaire, et chaque élément de b représente la valeur de biais du neurone de sortie correspondant. Chaque élément du tenseur de sortie final y est obtenu en effectuant un produit scalaire entre le vecteur de poids du neurone de sortie correspondant et le tenseur d'entrée, plus la valeur de décalage correspondante.
Maintenant, supposons que nous ayons un tenseur multidimensionnel X de forme (n_1,n_2,…,n_k). Nous devons le transmettre à une couche linéaire pour produire un tenseur de sortie Y de forme (m_1,m_2,…,m_l). À ce moment-là, que devons-nous faire ?
Tout d'abord, nous devons aplatir X en un tenseur unidimensionnel. Ce processus est souvent appelé opération « d'aplatissement » et peut être implémenté à l'aide de la fonction d'affichage de PyTorch. Plus précisément, nous pouvons changer la forme de X en (n_1times n_2times...times n_k,), c'est-à-dire organiser les éléments de toutes les dimensions dans une seule colonne. De cette façon, nous obtenons un tenseur unidimensionnel x, dont la taille est n_{in}=n_1times n_2times...times n_k.
Ensuite, nous pouvons passer x à la couche linéaire et obtenir le tenseur de sortie y. Plus précisément, on peut utiliser la formule de calcul de la couche linéaire :
y=Wx+b
Ici, la forme de W est (m_{out},n_{in}), et la forme de b est (m_{out},), m_{out} représente la taille du tenseur de sortie. Le résultat de la multiplication Wx est un tenseur unidimensionnel de forme (m_{out},). Après avoir ajouté le décalage b, le tenseur de sortie y de forme (m_{out},) est obtenu.
Enfin, nous devons reconvertir y sous la forme d'un tenseur multidimensionnel. Plus précisément, nous pouvons utiliser la fonction view dans PyTorch pour changer la forme de y en (m_1, m_2,..., m_l). De cette façon, nous obtenons le tenseur de sortie final Y.
Il convient de noter que lors de l'aplatissement d'un tenseur multidimensionnel en un tenseur unidimensionnel, nous devons nous assurer que l'ordre des éléments dans le tenseur reste inchangé. Par exemple, supposons que nous ayons un tenseur bidimensionnel X de forme (2,3) :
Si nous utilisons view(-1) pour implémenter, le résultat sera :
x=[1,2,3,4,5,6]
Ici, nous allons (1,2) et ( 4,5) Les éléments de ces deux rangées sont disposés ensemble, provoquant un changement d'ordre. Par conséquent, l'opération correcte devrait être d'utiliser view(-1) pour aplatir le tenseur, puis d'utiliser view(1,-1) pour le reconvertir à sa forme d'origine :
x=begin{bmatrix}1&2&3&4&5&6end{ bmatrice }
Il est à noter que le rôle d'une couche linéaire sur un tenseur multidimensionnel peut être vu comme une transformation linéaire indépendante pour chaque échantillon. Par exemple, supposons que nous ayons un tenseur à quatre dimensions X de forme (N, C, H, W), où N représente le nombre d'échantillons, C représente le nombre de canaux et H et W représentent respectivement la hauteur et la largeur. Nous pouvons étendre La couche linéaire effectue une transformation linéaire indépendante sur chaque échantillon pour obtenir un tenseur de sortie Y de forme (N, m_{out}). Enfin, nous pouvons redonner à Y sa forme originale (N,m_1,m_2,…,m_l) le long de la première dimension.
En bref, le rôle d'une couche linéaire sur un tenseur multidimensionnel peut être vu comme une transformation linéaire indépendante pour chaque échantillon. Dans les applications pratiques, nous aplatissons généralement les tenseurs multidimensionnels en tenseurs unidimensionnels et les transmettons à des couches linéaires. L'opération d'aplatissement doit garantir que l'ordre des éléments reste inchangé, sinon cela entraînera des résultats de calcul incorrects. Enfin, nous devons restaurer le tenseur de sortie à sa forme d'origine pour la prochaine étape du calcul.
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!