Sie erhalten den Fehler, weil result
definiert als Sequential()
nur ein Container für das Modell definiert ist und Sie keine Eingabe dafür definiert haben.
Angesichts dessen, was Sie erstellen möchten, setzen result
Sie die dritte Eingabe x3
.
first = Sequential()
first.add(Dense(1, input_shape=(2,), activation='sigmoid'))
second = Sequential()
second.add(Dense(1, input_shape=(1,), activation='sigmoid'))
third = Sequential()
# of course you must provide the input to result with will be your x3
third.add(Dense(1, input_shape=(1,), activation='sigmoid'))
# lets say you add a few more layers to first and second.
# concatenate them
merged = Concatenate([first, second])
# then concatenate the two outputs
result = Concatenate([merged, third])
ada_grad = Adagrad(lr=0.1, epsilon=1e-08, decay=0.0)
result.compile(optimizer=ada_grad, loss='binary_crossentropy',
metrics=['accuracy'])
Meine bevorzugte Methode zum Erstellen eines Modells mit dieser Art von Eingabestruktur wäre jedoch die Verwendung der funktionalen API .
Hier ist eine Implementierung Ihrer Anforderungen, um Ihnen den Einstieg zu erleichtern:
from keras.models import Model
from keras.layers import Concatenate, Dense, LSTM, Input, concatenate
from keras.optimizers import Adagrad
first_input = Input(shape=(2, ))
first_dense = Dense(1, )(first_input)
second_input = Input(shape=(2, ))
second_dense = Dense(1, )(second_input)
merge_one = concatenate([first_dense, second_dense])
third_input = Input(shape=(1, ))
merge_two = concatenate([merge_one, third_input])
model = Model(inputs=[first_input, second_input, third_input], outputs=merge_two)
ada_grad = Adagrad(lr=0.1, epsilon=1e-08, decay=0.0)
model.compile(optimizer=ada_grad, loss='binary_crossentropy',
metrics=['accuracy'])
Um die Frage in den Kommentaren zu beantworten:
1) Wie sind Ergebnis und Zusammenführung verbunden? Angenommen, Sie meinen, wie werden sie verkettet?
Die Verkettung funktioniert folgendermaßen:
a b c
a b c g h i a b c g h i
d e f j k l d e f j k l
dh Zeilen werden gerade verbunden.
2) Jetzt x1
wird in den ersten eingegeben, x2
wird in den zweiten und x3
in den dritten eingegeben.
result
undmerged
(odermerged2
) Ebenen im ersten Teil Ihrer Antwort miteinander verbunden?x1
undx2
ein Input fürfirst_input
,x3
fürthird_input
. Was ist mitsecond_input
?second_input
wird durch eineDense
Schicht geleitet und verkettet, mitfirst_input
der auch eineDense
Schicht durchlaufen wurde .third_input
wird durch eine dichte Schicht geleitet und die mit dem Ergebnis der vorherigen Verkettung (merged
) verketteteConcatenate()
undconcatenate()
Ebenen in Keras?Sie können experimentieren
model.summary()
(beachten Sie die Ebenengröße concatenate_XX (Concatenate)).Sie können das Notizbuch hier für Details anzeigen: https://nbviewer.jupyter.org/github/anhhh11/DeepLearning/blob/master/Concanate_two_layer_keras.ipynb
quelle
Concatenate()
undconcatenate()
Ebenen in Keras?Hinzufügen zu der oben akzeptierten Antwort, damit es denjenigen hilft, die sie verwenden
tensorflow 2.0
Ergebnis:
quelle