2017-02-08 11 views
5

Chcę stworzyć głęboką sieć neuronową w keras, gdzie każdy element warstwy wejściowej jest "zakodowany" przy użyciu tego samego, współdzielonego osadzania() - warstwa, zanim zostanie wprowadzona do głębszych warstw.Keras - Jak skonstruować współużytkowaną warstwę osadzania() dla każdego Input-Neuron

Każde wejście będzie liczbą określającą typ obiektu, a sieć powinna nauczyć się osadzania, które zawiera pewną wewnętrzną reprezentację "tego, czym jest ten obiekt".

Tak więc, jeśli warstwa wejściowa ma wymiar X, a osadzenie ma wymiary Y, pierwsza ukryta warstwa powinna składać się z neuronów X * Y (każdy wbudowany neuron wejściowy).

Here is a little image that should show the network architecture that I would like to create, where each input-element is encoded using a 3D-Embedding

Jak mogę to zrobić?

+0

Czy chcesz zachować ukrytą reprezentację w postaci wielu wyjść lub czy chcesz, aby tworzyły pojedynczy wektor funkcji? –

+0

Powinien to być wiele różnych wyjść w pierwszej ukrytej warstwie, po jednej dla każdego wejścia. Proszę spojrzeć na mój drugi komentarz poniżej odpowiedzi Nassima Bena. Dziękuję Ci bardzo! :-) –

Odpowiedz

5
from keras.layers import Input, Embedding 

first_input = Input(shape = (your_shape_tuple)) 
second_input = Input(shape = (your_shape_tuple)) 
... 

embedding_layer = Embedding(embedding_size) 

first_input_encoded = embedding_layer(first_input) 
second_input_encoded = embedding_layer(second_input) 
... 

Rest of the model.... 

Obiekt emnedding_layer będzie mieć wspólne wagi. Możesz to zrobić w postaci list warstw, jeśli masz dużo danych wejściowych.

Jeśli to, co chcesz przekształca tensora wejść, tak, aby to zrobić jest:

from keras.layers import Input, Embedding 

# If your inputs are all fed in one numpy array : 
input_layer = Input(shape = (num_input_indices,)) 

# the output of this layer will be a 2D tensor of shape (num_input_indices, embedding_size) 
embedded_input = Embedding(embedding_size)(input_layer) 

Czy to, czego szukałeś?

+0

Dziękuję bardzo. Nie można go przetestować już teraz, mają pewne problemy ze sprzętem: \ Pierwsza wygląda tak, jak chcę. Trudno, czy mogę nadal podawać w ten sposób tensor wejść? Tak więc Keras traktuje wejście jako jedną warstwę (= I feed 1 Vector), a nie jako tuzin indywidualnych wejść. Po drugie, czy to prawda, że ​​umieściłby CAŁĄ tensor jako "jeden obiekt", czy też osadziłby każdy element wektora wejściowego samodzielnie i indywidualnie? –

+0

Opisz bardziej szczegółowo przydatność tego, co chcesz. Napisz przykład z wejściami, które chcesz nakarmić, ich kształtem, a także jakim wyjściem (i jego kształtem) chcesz? –

+0

Wielkie dzięki! Chcę zaimplementować prosty algorytm uczenia zbrojenia. Ale zamiast pozwalać CNN na wyodrębnianie obiektów // wykrywania obiektów, chcę powiedzieć algorytmowi, który obiekt jest widoczny na jakiej pozycji na ekranie. Tak, jak ten http://imgur.com/a/ouidO (przepraszam umiejętności Paint). Ale chciałbym trenować wewnętrzną reprezentację - lub osadzanie - która uchwyca jako "czym jest każdy obiekt ...". Sieć powinna więc nauczyć się wspólnej, wewnętrznej reprezentacji tych identyfikatorów obiektów. –

Powiązane problemy