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:
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.