【keras】A `Concatenate` layer should be called on a list of at least 2 inputs

下面有一段两个Sequential的model连接一起的例子
在这里插入图片描述

错误示例

错误代码如下,

from keras.models import Sequential
from keras.layers.core import Dense
from keras.layers import Concatenate
import numpy as np

left_branch = Sequential()
left_branch.add(Dense(32, input_dim=1))

right_branch = Sequential()
right_branch.add(Dense(32, input_dim=1))

merged = Concatenate([left_branch, right_branch])

model= Sequential()
model.add(merged)
model.add(Dense(10, activation='softmax'))

input_data_1=np.linspace(1,32, num=32)
input_data_2=np.linspace(1,1, num=32)
targets=np.array([1,1,1,1,1,0,0,0,0,0])
final_data = np.concatenate([input_data_1,input_data_2])
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
model.fit(final_data, targets) 

在执行时抛出如下错误:

A `Concatenate` layer should be called on a list of at least 2 inputs

上层有两个Sequential的model,输入应该是两个,所以改一下

final_model.fit([input_data_1,input_data_2], targets)  

但是又抛出异常assert len(inputs) == 1

错误原因

  1. Sequential是一个model对象,对于Concatenate操作,是对Layer的操作。所以left_branch和right_brach需要改为layer对象
  2. 最终的model不需要Sequential来建立,直接调用Model生成,然后指定inputs/outputs即可
  3. fit的时候需要单独输入两个Input的值

正确示例

left_input = Input(shape=((1, 32)))
right_input = Input(shape=((1, 32)))
left_branch = Dense(10)(left_input)
right_branch = Dense(10)(right_input)

layer_cb = keras.layers.concatenate([left_branch, right_branch])
layer_out = Dense(2)(layer_cb)

model = Model(inputs=[left_input, right_input], outputs=layer_out)

model.summary()

input_data_1=np.linspace(1,32, num=32).reshape((1,1,32))
input_data_2=np.linspace(1,1, num=32).reshape((1,1,32))
targets=np.array([1,0]).reshape((1, 1, 2))

model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
model.fit([input_data_1, input_data_2], targets)

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值