python - 无法在 keras 中连接两个输入层。

标签 python tensorflow keras resnet

我正在尝试使用以下代码:

import tensorflow as tf 

from keras.layers import Input, Dense
from keras.models import Model, Sequential
from keras.layers import Conv2D, Concatenate
from keras.utils.vis_utils import plot_model

if __name__ == '__main__':
    imgRows = imgCols = 28
    print ("ImgRow and imgCols " , imgRows, imgCols)
    inputLayer = Input(shape=( 1,28,28))

    conv1 = Conv2D(64,(3,3),strides=1, padding="same", activation='relu') (inputLayer)

    #Residual 1 
    skip = Conv2D(128, (1,1), strides=1, padding="same", activation='relu') (conv1)
    conv1 = Conv2D(128, (3,3), strides=3, padding="same", activation='relu') (skip)
    conv1 = Conv2D(128, (3,3), strides=3, padding="same", activation='relu') (conv1)
    r1= Concatenate([skip, conv1])


    #residual 2 
    conv1 = Conv2D(128, (3,3), strides=3, padding="same", activation='relu') (r1)
    conv1 = Conv2D(128, (3,3), strides=3, padding="same", activation='relu') (conv1)

    conv1= Concatenate([r1, conv1])

    # Residual 3 
    skip = Conv2D(256, (1,1), strides=1, padding="same", activation='relu') (conv1)
    conv1 = Conv2D(256, (3,3), strides=3, padding="same", activation='relu') (conv1)
    conv1 = Conv2D(256, (3,3), strides=3, padding="same", activation='relu') (conv1)
    conv1= Concatenate([skip, conv1])
    out =  Conv2D(1, (1,1), strides=1, padding="same", activation='sigmoid') (conv1)



    #model =  Sequential()
    #model.add (inputLayer)
    #model.add ( conv1)

    model = Model(input=inputLayer, output=conv1)

    model.compile(optimizer=Nadam(lr=1e-5), loss="mean_square_error")

    plot_model (model, to_file="./keestu_model.png", show_shapes=True)

我收到以下错误:

错误消息是:

ValueError: Layer conv2d_5 was called with an input that isn't a 
symbolic tensor. Received type: <class 'keras.layers.merge.Concatenate'>. 
Full input: [<keras.layers.merge.Concatenate object at 0x7fd543841590>]. 
       All inputs to the layer should be tensors.

问题?:

错误消息对我来说非常清楚,第 5 层期望其输入为张量对象而不是连接对象。但我该如何解决它?

最佳答案

这是因为 Concatenate 是一个具有两个 API 版本的图层类:

  • Concatenate()([tensor1, tensor2])创建一个新的 concatenate 实例并应用于给定的张量。这是标准的函数式 API 风格。
  • concatenate([tensor1, tensor2]) 将实现相同的效果,但会为您创建一个隐式实例。来自 documentation :

    keras.layers.concatenate(inputs, axis=-1): Functional interface to the Concatenate layer.

顺便说一句merge layers为了方便起见,有这个双接口(interface)。

关于python - 无法在 keras 中连接两个输入层。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52233812/

相关文章:

python - 对字符串中的行进行排序,对数据进行分组

python - 在 nvidia jetson tx2 上安装 tensorflow 的问题

python - ValueError : Error when checking target: expected dense_2 to have shape (1, )但得到形状为(14,)的数组

machine-learning - 带有 Keras 的词级 Seq2Seq

machine-learning - Keras - 如何使用 KerasRegressor 执行预测?

python - 根据从另一个数组中删除的项目从 Python 数组中删除项目

python - 对单个句子进行预测时,收到错误 "Number of features of the model must match the input."

python - 没有 args 参数的 os.execv

python - 值错误 : in user code while using keras model in R

python - InvalidArgumentError : Cannot add tensor to the batch: number of elements does not match. 形状为 : [tensor]: [4], [batch]: [5] [Op:IteratorGetNext]