Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在keras中连接两个层?_Python_Machine Learning_Keras_Neural Network - Fatal编程技术网

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方法