6

Ich habe eine Frage zur Verwendung von Keras, zu der ich ziemlich neu bin. Ich benutze ein konvolutionelles neuronales Netz, das seine Ergebnisse in eine Standard-Perzeptron-Schicht einspeist, die meine Ausgabe erzeugt. Dieser CNN wird mit einer Reihe von Bildern gespeist. Das ist soweit ganz normal.Keras: Wie Input direkt in andere versteckte Schichten des neuronalen Netzes eingegeben werden als die erste?

Jetzt möchte ich einen kurzen Nicht-Bild-Eingabe-Vektor direkt in die letzte Perceptron-Schicht leiten, ohne sie durch alle CNN-Schichten zu senden. Wie kann das in Keras gemacht werden?

Mein Code sieht wie folgt aus:

# last CNN layer before perceptron layer 
model.add(Convolution2D(200, 2, 2, border_mode='same')) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) 
model.add(Dropout(0.25)) 

# perceptron layer 
model.add(Flatten()) 

# here I like to add to the input from the CNN an additional vector directly 

model.add(Dense(1500, W_regularizer=l2(1e-3))) 
model.add(Activation('relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(1)) 

Jede Antwort sehr geschätzt werden, Dank!

Antwort

3

bereitgestellt Backend Ihre Keras der Theano ist, können Sie folgendes tun:

import theano 
import numpy as np 

d = Dense(1500, W_regularizer=l2(1e-3), activation='relu') # I've joined activation and dense layers, based on assumption you might be interested in post-activation values 
model.add(d) 
model.add(Dropout(0.5)) 
model.add(Dense(1)) 

c = theano.function([d.get_input(train=False)], d.get_output(train=False)) 
layer_input_data = np.random.random((1,20000)).astype('float32') # refer to d.input_shape to get proper dimensions of layer's input, in my case it was (None, 20000) 
o = c(layer_input_data) 
+0

Danke für Ihre Hilfe, Serj. Ich denke ich verstehe jetzt das Konzept. –

5

Sie nicht zeigen, welche Art von Modell, das Sie verwenden, aber ich gehe davon aus, dass Sie Ihr Modell als sequenzielle initialisiert . In einem sequenziellen Modell können Sie nur eine Schicht nach der anderen stapeln - das Hinzufügen einer "Abkürzungs" -Verbindung ist nicht möglich.

Aus diesem Grund haben die Autoren von Keras die Option hinzugefügt, "Graph" -Modelle zu erstellen. In diesem Fall können Sie ein Diagramm (DAG) Ihrer Berechnungen erstellen. Es ist komplizierter als einen Stapel von Layern zu entwerfen, aber immer noch ziemlich einfach.

überprüfen Sie die Dokumentations-Website, um weitere Informationen zu suchen: http://keras.io/models/#using-the-graph-model

+0

Oh, ich verstehe. Ja, ich habe wirklich eine 'sequentielle' Einrichtung benutzt. Danke für deine Hilfe und den Link! –

0

Die Antwort here Arbeiten ist mehr hohe Niveau und arbeitet auch für tensorflow Backend:

input_1 = Input(input_shape) 
input_2 = Input(input_shape) 

merge = merge([input_1, input_2], mode="concat") # could also to "sum", "dot", etc. 
hidden = Dense(hidden_dims)(merge) 
classify = Dense(output_dims, activation="softmax")(hidden) 

model = Model(input=[input_1, input_2], output=hidden) 
Verwandte Themen