Vous obtenez l'erreur car result
défini comme Sequential()
étant simplement un conteneur pour le modèle et vous n'avez pas défini d'entrée pour celui-ci.
Étant donné ce que vous essayez de construire, définissez result
pour prendre la troisième entrée 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'])
Cependant, ma manière préférée de créer un modèle qui a ce type de structure d'entrée serait d'utiliser l' API fonctionnelle .
Voici une mise en œuvre de vos exigences pour vous aider à démarrer:
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'])
Pour répondre à la question dans les commentaires:
1) Comment le résultat et la fusion sont-ils connectés? En supposant que vous vouliez dire comment sont-ils concaténés.
La concaténation fonctionne comme ceci:
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
c'est-à-dire que les lignes sont simplement jointes.
2) Maintenant, x1
est entré dans le premier, x2
est entré dans le deuxième et x3
entré dans le troisième.
result
etmerged
(oumerged2
) les couches sont-elles liées les unes aux autres dans la première partie de votre réponse?x1
etx2
est une entrée pourfirst_input
,x3
pourthird_input
. De quoi s'agit-ilsecond_input
?second_input
est passé à travers uneDense
couche et est concaténé avecfirst_input
lequel a également été passé à travers uneDense
couche.third_input
est passé à travers une couche dense et la concaténation avec le résultat de la concaténation précédente (merged
)Concatenate()
et lesconcatenate()
couches dans Keras?Ajout à la réponse acceptée ci-dessus afin qu'elle aide ceux qui utilisent
tensorflow 2.0
Résultat:
la source
Vous pouvez expérimenter avec
model.summary()
(notez la taille du calque concatenate_XX (Concatenate))Vous pouvez consulter le cahier ici pour plus de détails: https://nbviewer.jupyter.org/github/anhhh11/DeepLearning/blob/master/Concanate_two_layer_keras.ipynb
la source
Concatenate()
et lesconcatenate()
couches dans Keras?