2017-05-18 5 views
7

Ich habe ein Problem, das sich mit der Vorhersage von zwei Ausgaben befasst, wenn ein Vektor von Prädiktoren gegeben wird. Nehmen Sie an, dass ein Prädiktorvektor wie x1, y1, att1, att2, ..., attn aussieht, der x1, y1 Koordinaten und att's die anderen Attribute sind, die an das Auftreten von x1, y1-Koordinaten angehängt werden. Basierend auf diesem Prädiktorsatz möchte ich x2, y2 voraussagen. Dies ist ein Zeitreihenproblem, das ich mit mehreren Regressionen zu lösen versuche. Meine Frage ist, wie Keras einrichten, die mir 2 Ausgänge in der letzten Schicht geben kann. Ich habe ein einfaches Regressionsproblem in Keras gelöst und der Code ist in my github verfügbar.Mehrere Ausgänge in Keras

Antwort

11
from keras.models import Model 
from keras.layers import *  

#inp is a "tensor", that can be passed when calling other layers to produce an output 
inp = Input((10,)) #supposing you have ten numeric values as input 


#here, SomeLayer() is defining a layer, 
#and calling it with (inp) produces the output tensor x 
x = SomeLayer(blablabla)(inp) 
x = SomeOtherLayer(blablabla)(x) #here, I just replace x, because this intermediate output is not interesting to keep 


#here, I want to keep the two different outputs for defining the model 
#notice that both left and right are called with the same input x, creating a fork 
out1 = LeftSideLastLayer(balbalba)(x)  
out2 = RightSideLastLayer(banblabala)(x) 


#here, you define which path you will follow in the graph you've drawn with layers 
#notice the two outputs passed in a list, telling the model I want it to have two outputs. 
model = Model(inp, [out1,out2]) 
model.compile(optimizer = ...., loss = ....) #loss can be one for both sides or a list with different loss functions for out1 and out2  

model.fit(inputData,[outputYLeft, outputYRight], epochs=..., batch_size=...) 
+0

Also, wenn ich Sie richtig verstehe, dann, was Sie meinen, ist: 'InputShape = (10,)' ' model_1 = Sequential() model_1.add (Dense (250, Aktivierung = 'tanh', input_shape = (InputShape))) model_1.add (Dicht (2, Aktivierung = 'relu')) model_1.compile (optimizer = 'adam', verlust = 'mse', metrics = ['genauigkeit']) model_1. Fit (Prädiktoren, Ziele, Epochen = was auch immer, ....) ' . Meine Frage ist, wie ist das anders als deins, wo Sie ausschließlich zwei Ausgänge angeben. –

+2

Kommentare zu meiner Antwort hinzugefügt :) - Sie können keine Zweige mit einem sequentiellen Modell erstellen, es ist einfach nicht möglich. –

+0

@Daniel Hallo Daniel, kannst du das weiter ausführen? Was ich suche, ist ein Netzwerk, das zwei verschiedene Dinge vorhersagt und so stellte ich ein Zweig-Happening auf meiner vorletzten Schicht vor, das in zwei verschiedene Softmax-Schichten eindringt, dann verkette ich die Ergebnisse dieser beiden Schichten und bringe sie dann zurück in Bezug auf das. Ist das in keras nicht möglich? – tryingtolearn

Verwandte Themen