redes principiantes practica para learning introduccion imagenes example español ejemplos convolucionales con clasificacion machine-learning neural-network keras word-embedding

machine-learning - principiantes - keras tensorflow



Explique con un ejemplo: cómo funciona la incrustación de capas en keras (1)

La capa de incrustación crea vectores de inserción de las palabras de entrada (yo mismo todavía no entiendo las matemáticas) de forma similar a lo que haría un guante word2vec o precalculado.

Antes de llegar a su código, hagamos un pequeño ejemplo.

texts = [''This is a text'',''This is not a text'']

Primero convertimos estas oraciones en el vector de los enteros, donde cada palabra es un número asignado a la palabra en el diccionario y el orden del vector crea la secuencia de las palabras.

from keras.preprocessing.text import Tokenizer from keras.preprocessing.sequence import pad_sequences from keras.utils import to_categorical max_review_length = 6 #maximum length of the sentence embedding_vecor_length = 3 top_words = 10 #num_words is tne number of unique words in the sequence, if there''s more top count words are taken tokenizer = Tokenizer(top_words) tokenizer.fit_on_texts(texts) sequences = tokenizer.texts_to_sequences(texts) word_index = tokenizer.word_index input_dim = len(word_index) + 1 print(''Found %s unique tokens.'' % len(word_index)) #max_review_length is the maximum length of the input text so that we can create vector [... 0,0,1,3,50] where 1,3,50 are individual words data = pad_sequences(sequences, max_review_length) print(''Shape of data tensor:'', data.shape) print(data) [Out:] ''This is a text'' --> [0 0 1 2 3 4] ''This is not a text'' --> [0 1 2 5 3 4]

Ahora puede ingresarlos en la capa de inserción

from keras.models import Sequential from keras.layers import Embedding model = Sequential() model.add(Embedding(top_words, embedding_vecor_length, input_length=max_review_length,mask_zero=True)) model.compile(optimizer=''adam'', loss=''categorical_crossentropy'') output_array = model.predict(data)

output_array contiene una matriz de tamaño (2, 6, 3): 2 comentarios de entrada u oraciones en mi caso, 6 es el número máximo de palabras en cada revisión (max_review_length) y 3 es embedding_vecor_length. P.ej

array([[[-0.01494285, -0.007915 , 0.01764857], [-0.01494285, -0.007915 , 0.01764857], [-0.03019481, -0.02910612, 0.03518577], [-0.0046863 , 0.04763055, -0.02629668], [ 0.02297204, 0.02146662, 0.03114786], [ 0.01634104, 0.02296363, -0.02348827]], [[-0.01494285, -0.007915 , 0.01764857], [-0.03019481, -0.02910612, 0.03518577], [-0.0046863 , 0.04763055, -0.02629668], [-0.01736645, -0.03719328, 0.02757809], [ 0.02297204, 0.02146662, 0.03114786], [ 0.01634104, 0.02296363, -0.02348827]]], dtype=float32)

En su caso, tiene una lista de 5000 palabras, que puede crear una revisión de un máximo de 500 palabras (se recortarán más) y convertir cada una de estas 500 palabras en vector de tamaño 32.

Puede ejecutar un mapeo entre los índices de palabras y los vectores de incrustación ejecutando:

model.layers[0].get_weights()

En el caso a continuación, top_words fue 10, por lo que tenemos un mapeo de 10 palabras y puede ver que la asignación para 0, 1, 2, 3, 4 y 5 es igual a output_array anterior.

[array([[-0.01494285, -0.007915 , 0.01764857], [-0.03019481, -0.02910612, 0.03518577], [-0.0046863 , 0.04763055, -0.02629668], [ 0.02297204, 0.02146662, 0.03114786], [ 0.01634104, 0.02296363, -0.02348827], [-0.01736645, -0.03719328, 0.02757809], [ 0.0100757 , -0.03956784, 0.03794377], [-0.02672029, -0.00879055, -0.039394 ], [-0.00949502, -0.02805768, -0.04179233], [ 0.0180716 , 0.03622523, 0.02232374]], dtype=float32)]

Como se menciona en https://stats.stackexchange.com/questions/270546/how-does-keras-embedding-layer-work, estos vectores se inician de forma aleatoria y se optimizan con los optimizadores de palabras clave al igual que con cualquier otro parámetro de la red.

No entiendo la capa de incrustación de Keras. Aunque hay muchos artículos que lo explican, aún estoy confundido. Por ejemplo, el siguiente código del análisis de sentimiento de imdb

top_words = 5000 max_review_length = 500 embedding_vecor_length = 32 model = Sequential() model.add(Embedding(top_words, embedding_vecor_length, input_length=max_review_length)) model.add(LSTM(100)) model.add(Dense(1, activation=''sigmoid'')) model.compile(loss=''binary_crossentropy'', optimizer=''adam'', metrics=[''accuracy'']) print(model.summary()) model.fit(X_train, y_train, nb_epoch=3, batch_size=64)

En este código, ¿qué hace exactamente la capa de incrustación, cuál sería el resultado de la capa de incrustación, sería bueno si alguien pudiera explicarlo con algún ejemplo puede ser !!