Besoin de comprendre le fonctionnement de la couche 'Enrobage' dans la bibliothèque Keras. J'exécute le code suivant en Python
import numpy as np
from keras.models import Sequential
from keras.layers import Embedding
model = Sequential()
model.add(Embedding(5, 2, input_length=5))
input_array = np.random.randint(5, size=(1, 5))
model.compile('rmsprop', 'mse')
output_array = model.predict(input_array)
ce qui donne la sortie suivante
input_array = [[4 1 3 3 3]]
output_array =
[[[ 0.03126476 0.00527241]
[-0.02369716 -0.02856163]
[ 0.0055749 0.01492429]
[ 0.0055749 0.01492429]
[ 0.0055749 0.01492429]]]
Je comprends que chaque valeur du tableau input_array est mappée sur un vecteur de 2 éléments dans le tableau output_array, un vecteur 1 X 4 donne donc 1 X 4 X 2 vecteurs. Mais comment sont calculées les valeurs mappées?
text-mining
word-embeddings
keras
prashanth
la source
la source
Réponses:
En fait, les vecteurs de sortie ne sont pas calculés à partir de l'entrée en utilisant une opération mathématique. Au lieu de cela, chaque entier en entrée est utilisé comme index pour accéder à une table contenant tous les vecteurs possibles. C'est la raison pour laquelle vous devez spécifier la taille du vocabulaire en tant que premier argument (afin que la table puisse être initialisée).
L'application la plus courante de cette couche concerne le traitement de texte. Voyons un exemple simple. Notre ensemble de formation ne comprend que deux phrases:
a bientôt, j'espère
C'est un plaisir de vous revoir
Nous pouvons donc coder ces expressions en attribuant à chaque mot un nombre entier unique (par ordre d'apparition dans notre jeu de données d'apprentissage, par exemple). Ensuite, nos phrases pourraient être réécrites comme suit:
Imaginons maintenant que nous voulions former un réseau dont la première couche est une couche d'intégration. Dans ce cas, nous devrions l'initialiser comme suit:
Le premier argument (7) est le nombre de mots distincts dans l'ensemble d'apprentissage. Le deuxième argument (2) indique la taille des vecteurs d'inclusion. Le input_length argumet, bien sûr, détermine la taille de chaque séquence d'entrée.
Une fois le réseau formé, nous pouvons obtenir les poids de la couche d’incorporation qui, dans ce cas, sera de taille (7, 2) et peuvent être considérés comme la table utilisée pour mapper des entiers sur des vecteurs d’incorporation:
Donc, selon ces intégrations, notre deuxième phrase de formation sera représentée par:
Cela peut sembler contre-intuitif au début, mais les moteurs de différenciation automatique sous-jacents (Tensorflow ou Theano, par exemple) parviennent à optimiser ces vecteurs associés à chaque entier saisi, comme tout autre paramètre de votre modèle. Il est également intéressant d’utiliser les intégrations apprises par d’autres méthodes / personnes de différents domaines (voir https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html ) en tant que fait dans [1].
[1] D. López-Sánchez, JR Herrero, AG Arrieta et JJ Corchado. Hybridizing metric learning et raisonnement par cas pour la détection de clickbait adaptable. Intelligence appliquée, 1-16.
la source
J'avais aussi la même question et après avoir lu quelques articles et matériels, je pense avoir compris le rôle du rôle de la couche intégrée.
Je pense que ce message est également utile à comprendre, cependant, je trouve vraiment la réponse de Daniel commode à digérer. Mais j'ai aussi eu l'idée derrière cela principalement en comprenant les mots enchâssés .
Je pense qu’il est inexact de dire que l’incorporation de couches réduit le nombre d’entrées à codage unique à un nombre réduit d’entrées. Après tout, le vecteur one-hot est une donnée unidimensionnelle et il est en effet transformé en 2 dimensions dans notre cas. Mieux vaut dire que
Que ce soit en 2 dimensions ou même plus.
Je trouve également une similitude très intéressante entre l’intégration de mots dans l’analyse en composantes principales. Bien que le nom puisse paraître compliqué, le concept est simple. L’ACP définit un ensemble de données sur la base de règles générales (appelées composantes principales). Donc, c'est comme si vous aviez des données et que vous voulez les décrire mais en utilisant seulement 2 composants. Ce qui, dans ce sens, ressemble beaucoup à l’incorporation de mots. Ils font tous deux le même travail dans un contexte différent. Vous pouvez en savoir plus ici . J'espère que peut-être comprendre la PCA aide à comprendre l'intégration des couches par analogie.
Pour conclure, la réponse à la question initiale du message " Comment calcule-t-il la valeur? " Serait:
la source