Python 如何在keras中连接两个层?
我有一个两层神经网络的例子。第一层接受两个参数并有一个输出。第二层应采用第一层的一个参数和一个附加参数。应该是这样的:Python 如何在keras中连接两个层?,python,machine-learning,keras,neural-network,Python,Machine Learning,Keras,Neural Network,我有一个两层神经网络的例子。第一层接受两个参数并有一个输出。第二层应采用第一层的一个参数和一个附加参数。应该是这样的: x1 x2 x3 \ / / y1 / \ / y2 因此,我创建了一个包含两个层的模型,并试图合并它们,但它返回了一个错误:顺序模型中的第一层必须获得一个“input\u shape”或“batch\u input\u shape”参数。在result.add(merged)行上 型号: first=Sequential() 首先,添加(
x1 x2 x3
\ / /
y1 /
\ /
y2
因此,我创建了一个包含两个层的模型,并试图合并它们,但它返回了一个错误:顺序模型中的第一层必须获得一个“input\u shape”或“batch\u input\u shape”参数。
在result.add(merged)
行上
型号:
first=Sequential()
首先,添加(密集(1,输入_形=(2,),激活=(sigmoid'))
第二个=顺序()
添加(密集(1,输入_形=(1,),激活=(sigmoid'))
结果=顺序()
合并=连接([第一,第二])
ada_grad=Adagrad(lr=0.1,ε=1e-08,衰减=0.0)
结果.添加(合并)
编译(优化器=ada\u grad,loss=\u loss\u tensor,metrics=['accurity'])
之所以出现错误,是因为定义为Sequential()
的result
只是模型的容器,而您尚未为其定义输入
给定您试图构建的内容,设置结果
以获取第三个输入x3
first=Sequential()
首先,添加(密集(1,输入_形=(2,),激活=(sigmoid'))
第二个=顺序()
添加(密集(1,输入_形=(1,),激活=(sigmoid'))
第三个=顺序()
#当然,您必须为结果提供输入,这将是您的x3
第三,添加(密集(1,输入_形=(1,),激活=(sigmoid'))
#假设您在第一层和第二层上再添加几层。
#连接它们
合并=连接([第一,第二])
#然后连接两个输出
结果=连接([合并,第三个])
ada_grad=Adagrad(lr=0.1,ε=1e-08,衰减=0.0)
compile(优化器=ada\u grad,loss='binary\u crossentropy',
指标=[‘准确度’])
然而,我构建具有这种类型输入结构的模型的首选方法是使用
以下是您的需求实现,帮助您开始:
来自keras.models导入模型
从keras.layers导入连接、密集、LSTM、输入、连接
从keras.optimizers导入Adagrad
第一个输入=输入(形状=(2,))
第一个密集=密集(1,)(第一个密集输入)
第二个输入=输入(形状=(2,))
第二个密集=密集(1,)(第二个密集输入)
合并一=连接([第一个密集,第二个密集])
第三个输入=输入(形状=(1,))
合并两个=连接([合并一个,第三个输入])
模型=模型(输入=[第一个输入,第二个输入,第三个输入],输出=合并两个)
ada_grad=Adagrad(lr=0.1,ε=1e-08,衰减=0.0)
compile(优化器=ada\u grad,loss='binary\u crossentropy',
指标=[‘准确度’])
回答评论中的问题:
x1 x2 x3
\ / /
y1 /
\ /
y2
abc
a b c g h i a b c g h i
d e f j k l d e f j k l
i、 e行刚刚连接起来
x1
被输入到第一个,x2
被输入到第二个,x3
被输入到第三个您可以尝试使用
model.summary()
(注意concatenate\u XX(concatenate)层的大小)
您可以在此处查看笔记本的详细信息:
添加到上述公认的答案中,以帮助使用
tensorflow 2.0的用户
导入tensorflow作为tf
#一些数据
c1=tf.constant([[1,1,1],[2,2,2]],dtype=tf.float32)
c2=tf.常数([[2,2,2],[3,3,3]],dtype=tf.float32)
c3=tf.constant([[3,3,3],[4,4,4]],dtype=tf.float32)
#烘烤层x1、x2、x3
x1=tf.keras.致密层(10)(c1)
x2=tf.keras.致密层(10)(c2)
x3=tf.keras.layers.致密(10)(c3)
#合并层y1
y1=tf.keras.layers.Concatenate(轴=1)([x1,x2])
#合并层y2
y2=tf.keras.layers.Concatenate(轴=1)([y1,x3])
#打印信息
打印(“-”*30)
打印(“x1”,x1.形状,“x2”,x2.形状,“x3”,x3.形状)
打印(“y1”,y1.形状)
打印(“y2”,y2.形状)
打印(“-”*30)
结果:
------------------------------
x1 (2, 10) x2 (2, 10) x3 (2, 10)
y1 (2, 20)
y2 (2, 30)
------------------------------
答案第一部分的result
和merged
(或merged2
)层是如何相互连接的?第二个问题。据我所知,x1
和x2
是第一次输入的输入
,x3
是第三次输入的输入
。关于第二个输入
?第二个输入
通过一个密集
层,并与第一个输入
连接,后者也通过一个密集
层third_input
通过一个密集层,并与先前的连接结果连接(merged
)@PutonSpectales使用函数API的第二种方法有效,但是,在Keras 2.0.2中,使用顺序模型的第一种方法不适用于我。我粗略地检查了实现,调用“Concatenate([…])没有什么作用,而且,您不能将其添加到序列模型中。实际上,我认为在他们更新Keras之前,仍然需要使用“Merge([…],'concat')这种去擦亮的方法。你认为呢?Keras中的Concatenate()
层和Concatenate()
层之间有什么区别?Keras中的Concatenate()
层和Concatenate()
层之间有什么区别?你知道区别吗,一个是Keras类,另一个是tensorflow方法