[SOLVED] How can I change fllaten Layers Output as a Array in CNN

Issue

This Content is from Stack Overflow. Question asked by Amir

I use a two path CNN for image processing. I want to concatenate both models after flatten layer. I want to change The output of flatten Layers and change them as a array. but when I want to change the output of flatten layer i am encountering this error:

AttributeError: ‘Tensor’ object has no attribute ‘numpy’

Code:


finput1=modelBuilder.configInitialModel(input1)           
finput2=modelBuilder.configInitialModel(input2)                                                          

output=modelBuilder.concatinateflattenInputs(finput1,finput2)

def configInitialModel(input):
    conv=Conv2D(16, 3, 3, border_mode='same',
                     input_shape=input_shape, activation='relu')(input)
    conv=Conv2D(16, 3, 3, border_mode='same', activation='relu')(conv)
    conv=MaxPooling2D(pool_size=(2, 2))(conv)
    conv=Conv2D(32, 3, 3, border_mode='same',
                     input_shape=input_shape, activation='relu')(conv)
    conv=Conv2D(32, 3, 3, border_mode='same', activation='relu')(conv)
    conv=MaxPooling2D(pool_size=(2, 2))(conv)
    conv=Conv2D(64, 3, 3, border_mode='same',
                     input_shape=input_shape, activation='relu')(conv)
    conv=Conv2D(64, 3, 3, border_mode='same', activation='relu')(conv)
    conv=MaxPooling2D(pool_size=(2, 2))(conv)
    conv=Conv2D(128, 3, 3, border_mode='same',
                     input_shape=input_shape, activation='relu')(conv)
    conv=Conv2D(128, 3, 3, border_mode='same', activation='relu')(conv)
    conv=MaxPooling2D(pool_size=(2, 2))(conv)
    conv=Conv2D(256, 3, 3, border_mode='same',
                     input_shape=input_shape, activation='relu')(conv)
    conv=Conv2D(256, 3, 3, border_mode='same', activation= 'relu')(conv)   # Custom Activation
    conv=MaxPooling2D(pool_size=(2, 2))(conv)
    # conv=Activation('sigmoid')(conv)
    flatten=Flatten()(conv)
    a = flatten.numpy
    return flatten

def concatentate_flatten_inputs(finput1, finput2):

    new_val = finput1.numpy

    con_feats = Concatenate()([finput1, finput2])
    print(tf.shape(con_feats)) 

    dense = Dense(256, activation="relu")(con_feats)
    dense = Dropout(0.5)(dense)
    dense = Dense(256, activation="relu")(dense)
    dense = Dropout(0.5)(dense)
    dense = Dense(1)(dense)
    output = Activation("sigmoid")(dense)

    return output



Solution

Assuming you want to have one model. You could concatenate the two flattened layers.

def concatentate_flatten_inputs(finput1, finput2):
    con_feats = Concatenate()([finput1, finput2])
    dense = Dense(256, activation="relu")(con_feats)

So you get a model like this:

model


This Question was asked in StackOverflow by Amir and Answered by AndrzejO It is licensed under the terms of CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.

people found this article helpful. What about you?