2016-01-29 13 views
9

Sono piuttosto nuovo su Neural Networks e Keras Library e mi chiedo come posso usare il Embedding Layer come descritto here per mascherare i miei dati di input da un tensore 2D a un tensore 3D per un RNN.Come utilizzare il layer di incorporamento per reti neurali ricorrenti (RNN) in Keras

Dire dati i miei TimeSeries cercando come segue (un tempo più basso):

X_train = [ 
    [1.0,2.0,3.0,4.0], 
    [2.0,5.0,6.0,7.0], 
    [3.0,8.0,9.0,10.0], 
    [4.0,11.0,12.0,13.0], 
    ... 
] # with a length of 1000 

Ora, dico io vorrei dare l'RNN ultimi 2 vettori di caratteristiche al fine di prevedere il vettore funzione per il tempo t +1.

Attualmente (senza il livello di inclusione), sto creando il tensore 3D richiesto con forma (nb_samples, timesteps, input_dim) me stesso (come in questo esempio here).

correlati a mio esempio, la finale 3D Tensor avrebbe poi apparire come segue:

X_train_2 = [ 
    [[1.0,2.0,3.0,4.0], 
    [2.0,5.0,6.0,7.0]], 
    [[2.0,5.0,6.0,7.0], 
    [3.0,8.0,9.0,10.0]], 
    [[3.0,8.0,9.0,10.0], 
    [4.0,11.0,12.0,13.0]], 
    etc... 
] 

e Y_train:

Y_train = [ 
    [3.0,8.0,9.0,10.0], 
    [4.0,11.0,12.0,13.0], 
    etc... 
] 

Il mio modello appare come segue (adattato alla esempio semplificato di cui sopra):

num_of_vectors = 2 
vect_dimension = 4 

model = Sequential() 
model.add(SimpleRNN(hidden_neurons, return_sequences=False, input_shape=(num_of_vectors, vect_dimension))) 
model.add(Dense(vect_dimension)) 
model.add(Activation("linear")) 
model.compile(loss="mean_squared_error", optimizer="rmsprop") 
model.fit(X_train, Y_train, batch_size=50, nb_epoch=10, validation_split=0.15) 

Infine, la mia domanda sarebbe, come posso evitare di fare quel tensore 2D a Tensore 3D che rimodella me stesso e uso invece il livello Incorporamento? Credo che dopo il modello = sequenziale() avrei dovuto aggiungere qualcosa come:

model.add(Embedding(?????)) 

Probabilmente la risposta è piuttosto semplice, sto semplicemente confuso dalla documentazione dello strato di incorporamento.

risposta

7

Potete voi come segue:

Nota:

  1. ho generato un po 'di X e Y come sequenza di 0 solo per darvi un'idea della struttura di ingresso.

  2. Se si dispone di un multi classe y_train, è necessario eseguire il binarize.

  3. Potrebbe essere necessario aggiungere il riempimento se si dispone di dati di varia lunghezza.

  4. Se ho capito correttamente sulla previsione al tempo t + 1, potresti voler osservare l'apprendimento dalla Sequenza alla Sequenza.

Prova qualcosa di simile:

hidden_neurons = 4 
nb_classes =3 
embedding_size =10 

X = np.zeros((128, hidden_neurons), dtype=np.float32) 
y = np.zeros((128, nb_classes), dtype=np.int8) 


model = Sequential() 
model.add(Embedding(hidden_neurons, embedding_size)) 
model.add(SimpleRNN(hidden_neurons, return_sequences=False)) 
model.add(Dense(nb_classes)) 
model.add(Activation("softmax")) 
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', class_mode="categorical") 
model.fit(X, y, batch_size=1, nb_epoch=1) 
+0

forse avrei dovuto aggiungere un ".0" dietro tutti i miei numeri. In realtà non sto cercando di eseguire un'analisi categoriale. – Kito

0

Da quello che so finora, lo strato di incorporamento sembra essere più o meno per la riduzione della dimensionalità come word embedding. Quindi in questo senso non sembra applicabile come strumento di rimodellamento generale.

Fondamentalmente se si ha una mappatura di parole in numeri interi come {auto: 1, mouse: 2 ... zebra: 9999}, il testo di input sarebbe vettore di parole rappresentate dall'ID intero, come [1, 2 9999 ...], che significherebbe [auto, mouse, zebra ...].Ma sembra essere efficiente mappare le parole ai vettori di numeri reali con la lunghezza del vocabolario, quindi se il tuo testo ha 1000 parole univoche, devi mappare ogni parola al vettore di numeri reali con lunghezza di 1000. Non sono sicuro, ma io penso che rappresenti in gran parte una questione di quanto il significato di una parola sia simile a tutte le altre parole, ma non sono sicuro che sia giusto e che ci siano altri modi per incorporare le parole.

Problemi correlati