Keras:Merge / Concatenate Layer:TypeError:__ init __()得到参数'axis'的多个值

时间:2017-11-16 00:41:47

标签: python lambda keras keras-layer keras-2

我创建了以下网络。我们的想法是结合leftright的输出,然后发送到LSTM模型。

EMBED_DIM = 4
look_back = 6
feature_num = 2
ENCODE_DIM = 676

left = Sequential()
left.add(Dense(EMBED_DIM,input_shape=(ENCODE_DIM,)))
left.add(RepeatVector(look_back))
left.add(Reshape((look_back,EMBED_DIM)))

right = Sequential()
right.add(Lambda(lambda x: x,input_shape=(look_back,feature_num)))


# create and fit the LSTM network
model = Sequential()
model.add(Concatenate([left, right], axis = 2,input_shape=(look_back, EMBED_DIM + feature_num) ))
model.add(LSTM(8, input_shape=(look_back,feature_num + EMBED_DIM)))

model.add(Dense(2))
model.compile(loss='mean_squared_error', optimizer='adam')

我试图连接左右输出,然后将新张量发送到LSTM模型。

但是,我收到以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-156-275f5597cdad> in <module>()

---> 37 model.add(Concatenate([left, right], axis = 2,input_shape=(look_back, EMBED_DIM + feature_num) ))
     38 model.add(LSTM(8, input_shape=(look_back,feature_num + EMBED_DIM)))
     39 

TypeError: __init__() got multiple values for argument 'axis'

知道我做错了什么吗?我可以添加Concatenate图层作为模型的第一层吗?谢谢!

1 个答案:

答案 0 :(得分:1)

顺序模型并不意味着有分支。使用功能API模型。

让我们获得&#34;张贴&#34;从左侧和右侧:

leftOutput = left.output    
rightOutput = right.output

现在,Concatenate是一个遵循所有其他图层相同逻辑的图层。 (首先你创建它,然后用输入张量调用它):

#first parentheses: create the layer / second parentheses: call the layer with inputs
output = Concatenate(axis=2)([leftOutput,rightOutput])

让我们将模型的其余部分保留为功能API:

output = LSTM(8)(output)
output = Dense(2)(output)

现在我们创建模型,告诉它输入和输出是什么:

inputTensorLeft = left.input
inputTensorRight = right.input    

fullModel = Model([inputTensorLeft,inputTensorRight], output)

请注意,您最终得到了三个模型,但其中一个模型包含另外两个模型。它们具有相同的权重。如果您正在训练共享路径,训练一个将训练其他人。