2017-06-27 4 views
1

enter image description hereKeras/TF: Zeit Distributed CNN + LSTM für visuelle Erkennung

Ich versuche, das Modell aus dem Artikel (https://arxiv.org/abs/1411.4389), die im Wesentlichen besteht aus zeitlich verteilt CNNs gefolgt von einer Folge von LSTMs mit der Verwendung von Keras zu implementieren TF.

Aber ich habe ein Problem, versuchen, wenn ich die TimeDirstibuted Funktion nur meine Faltungs & Pooling Schicht für enthalten sollte, um herauszufinden, oder auch für die LSTMs?

Gibt es eine Möglichkeit, die CNN-Schichten parallel zu betreiben (Basierend auf der Anzahl der Frames in der Sequenz, die ich verarbeiten möchte und basierend auf der Anzahl der Kerne, die ich habe)?

Und zuletzt angenommen, dass jeder Eintrag besteht aus "n" Frames (in der Reihenfolge), wobei n auf der Grundlage der aktuellen Dateneingabe variiert, was ist die am besten geeignete Eingabe Dimension? und wäre "n" die Losgröße? Gibt es eine Möglichkeit, die Anzahl der CNNs in // auf beispielsweise 4 zu beschränken (so dass Sie nach 4 Frames eine Ausgabe Y erhalten)?

PS: Die Eingänge sind kleine Videos (dh eine Folge von Frames)

PS: Der Ausgang Dimension auf meine Frage irrelevant ist, so dass es hier nicht diskutiert wird

Danke

Antwort

-1

[ Bearbeitet]
Sorry, nur eine Link-Antwort war schlecht. Also versuche ich eine Frage nach der anderen zu beantworten.

wenn ich die TimeDirstibuted Funktion nur für meine Faltungs & Pooling Schichten oder auch für die LSTMs enthalten sollte?

Verwenden Sie die TimeDistributed-Funktion nur für Conv- und Pooling-Layer, keine Notwendigkeit für LSTMs.

Gibt es eine Möglichkeit, die CNN-Schichten parallel zu betreiben?

Nein, wenn Sie CPU verwenden. Es ist möglich, wenn Sie GPU verwenden.
Transparent Multi-GPU Training on TensorFlow with Keras

was ist die beste geeignete Eingabe Dimension?

Fünf. (Charge, Zeit, Breite, Höhe, Kanal).

Gibt es eine Möglichkeit, die Anzahl der CNNs in // um zum Beispiel zu begrenzen 4

Sie dies durch manuelles Ausrichten Frames in eine bestimmte Anzahl im Vorprozess tun kann, nicht im Netz. Mit anderen Worten, die Dimension "Zeit" sollte 4 sein, wenn Sie nach der Verarbeitung von 4 Frames ausgegeben werden möchten.

model = Sequential() 

model.add(
    TimeDistributed(
     Conv2D(64, (3, 3), activation='relu'), 
     input_shape=(data.num_frames, data.width, data.height, 1) 
    ) 
) 
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(1, 1)))) 

model.add(TimeDistributed(Conv2D(128, (4,4), activation='relu'))) 
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(2, 2)))) 

model.add(TimeDistributed(Conv2D(256, (4,4), activation='relu'))) 
model.add(TimeDistributed(MaxPooling2D((2, 2), strides=(2, 2)))) 

# extract features and dropout 
model.add(TimeDistributed(Flatten())) 
model.add(Dropout(0.5)) 

# input to LSTM 
model.add(LSTM(256, return_sequences=False, dropout=0.5)) 

# classifier with sigmoid activation for multilabel 
model.add(Dense(data.num_classes, activation='sigmoid')) 

Referenz:
PRI-MATRIX FACTORIZATION - BENCHMARK