web-dev-qa-db-ja.com

Kerasの複数の出力

予測変数のベクトルが与えられたときに2つの出力を予測する問題があります。予測ベクトルはx1, y1, att1, att2, ..., attnのように見え、x1, y1は座標であり、att'sx1, y1座標のオカレンスに付加された他の属性であると想定します。この予測セットに基づいて、x2, y2を予測します。これは時系列の問題であり、多重回帰を使用して解決しようとしています。私の質問は、最終層で2つの出力を得ることができるkerasの設定方法です。ケラスで単純な回帰問題を解決しました。コードは my github で利用可能です。

24
Neelabh Pant
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=...)
32
Daniel Möller