Whoami
Whoami

Reputation: 14408

Unable to concatenate two input layes in keras.

I am trying with below code:

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)

I am getting the below error:

Error Message is:

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.

Question?:

The error message is very clear to me that the layer 5 expects its input as tensor object not an concatenate object. But how can i fix it ?

Upvotes: 1

Views: 75

Answers (1)

nuric
nuric

Reputation: 11225

That is because Concatenate is a layer class with two API versions:

  • Concatenate()([tensor1, tensor2])creates a new instance of concatenate and applies on the given tensors. This is the standard functional API style.
  • concatenate([tensor1, tensor2]) will achieve same thing but create an implicit instance for you. From the documentation:

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

By the way all merge layers have this dual interface for convenience.

Upvotes: 2

Related Questions