Python Keras 中的多个输出

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/44036971/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 23:39:33  来源:igfitidea点击:

Multiple outputs in Keras

pythonneural-networkdeep-learningregressionkeras

提问by Neelabh Pant

I have a problem which deals with predicting two outputs when given a vector of predictors. Assume that a predictor vector looks like x1, y1, att1, att2, ..., attn, which says x1, y1are coordinates and att'sare the other attributes attached to the occurrence of x1, y1coordinates. Based on this predictor set I want to predict x2, y2. This is a time series problem, which I am trying to solve using multiple regresssion. My question is how do I setup keras, which can give me 2 outputs in the final layer. I have solved simple regression problem in keras and the code is avaialable in my github.

我有一个问题,当给定一个预测变量向量时,它处理预测两个输出。假设一个预测向量看起来像x1, y1, att1, att2, ..., attn,它表示x1, y1是坐标,并且att's是附加到x1, y1坐标出现的其他属性。基于这个预测器集,我想预测x2, y2. 这是一个时间序列问题,我试图使用多重回归来解决。我的问题是如何设置 keras,它可以在最后一层给我 2 个输出。我已经解决了 keras 中的简单回归问题,代码在我的 github 中可用。

回答by Daniel M?ller

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=...)