2017-07-05 1 views
2

J'essaie de combiner deux sorties qui sont produites par le même réseau qui fait des prédictions sur une tâche de classe 4 et une tâche de classe 10. Ensuite, je cherche à combiner ces sorties pour donner un tableau de longueur 14 que j'utilise comme cible finale. Bien que cela semble fonctionner activement les prédictions sont toujours pour une classe de sorte qu'il produit une probabilité dist qui ne concerne que la sélection de 1 sur 14 options au lieu de 2. Ce que j'ai vraiment besoin de faire est de fournir 2 prédictions, une pour chaque classe. Je veux que tout cela soit produit par le même modèle.Keras - Faire deux prédictions à partir d'un réseau de neurones

input = Input(shape=(100, 100), name='input') 
lstm = LSTM(128, input_shape=(100, 100)))(input) 

output1 = Dense(len(4), activation='softmax', name='output1')(lstm) 
output2 = Dense(len(10), activation='softmax', name='output2')(lstm) 

output3 = concatenate([output1, output2]) 

model = Model(inputs=[input], outputs=[output3]) 

Mon problème consiste à déterminer une fonction de perte et une méthode de prédiction appropriées? Pour la prédiction, je peux simplement saisir la sortie de chaque couche après le softmax mais je ne sais pas comment définir la fonction de perte pour chacune de ces choses à entraîner.

Des idées?

Merci beaucoup

Répondre

5

Vous n'avez pas besoin de concaténer les sorties, votre modèle peut avoir deux sorties:

input = Input(shape=(100, 100), name='input') 
lstm = LSTM(128, input_shape=(100, 100)))(input) 

output1 = Dense(len(4), activation='softmax', name='output1')(lstm) 
output2 = Dense(len(10), activation='softmax', name='output2')(lstm) 

model = Model(inputs=[input], outputs=[output1, output2]) 

ensuite pour former ce modèle, vous utilisez généralement deux pertes qui sont pondérées à produire une seule perte:

model.compile(optimizer='sgd', loss=['categorical_crossentropy', 
       'categorical_crossentropy'], loss_weights=[0.2, 0.8]) 

assurez-vous de formater vos données à droite, comme maintenant chaque échantillon d'entrée correspond à deux échantillons marqués de sortie. Pour plus d'informations, consultez le Functional API Guide.

+0

Ah! Je vous remercie. Je pensais qu'il devait y avoir une façon assez directe de le faire. Donc, quand je cours mon model.predict devrais-je obtenir une sortie pour chacun d'eux? – tryingtolearn

+0

@tryingtolearn Oui, vous aurez deux sorties pour chaque entrée. –