如何在Keras中实现具有多个输出的自定义图层?

时间:2018-01-10 19:33:16

标签: python output keras layer multipleoutputs

如标题中所述,我想知道如何让自定义图层返回多个张量:out1,out2,... outn?
我试过了

keras.backend.concatenate([out1, out2], axis = 1)

但这只适用于长度相同的张量,而且必须是另一种解决方案,而不是每次连接两个张量,是吗?

1 个答案:

答案 0 :(得分:1)

在图层的call方法中,执行图层计算的地方,您可以返回张量列表:

def call(self, inputTensor):

    #calculations with inputTensor and the weights you defined in "build"
    #inputTensor may be a single tensor or a list of tensors

    #output can also be a single tensor or a list of tensors
    return [output1,output2,output3]

注意输出形状:

def compute_output_shape(self,inputShape):

    #calculate shapes from input shape    
    return [shape1,shape2,shape3]

使用图层的结果是张量列表。 当然,某些类型的keras层接受列表作为输入,而其他类型则不接受 您必须使用功能API Model正确管理输出。在具有多个输出时,您可能会遇到使用Sequential模型的问题。

我在我的机器上测试了这段代码(Keras 2.0.8),它完美无缺:

from keras.layers import *
from keras.models import *
import numpy as np

class Lay(Layer):
    def init(self):
        super(Lay,self).__init__()

    def build(self,inputShape):
        super(Lay,self).build(inputShape)

    def call(self,x):
        return [x[:,:1],x[:,-1:]]

    def compute_output_shape(self,inputShape):
        return [(None,1),(None,1)]


inp = Input((2,))
out = Lay()(inp)
print(type(out))

out = Concatenate()(out)
model = Model(inp,out)
model.summary()

data = np.array([[1,2],[3,4],[5,6]])
print(model.predict(data))

import keras
print(keras.__version__)