concatenate vgg and dense using tensorflow

Viewed 47

I want to concatenate last layers of VGG and Dense net using a concatenate layers as below, and finally add a svm classifier.

enter image description here

I wrote code below in python 3.7 for creating models:

from tensorflow.keras.applications import DenseNet121
from tensorflow.keras.applications import VGG16
from tensorflow.keras.layers import AveragePooling2D
from tensorflow.keras.layers import Dropout
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Input
from tensorflow.keras.models import Model


def create_dense_mdl(is_trn):
    bModel = DenseNet121(weights="imagenet", include_top=False, input_tensor=Input(shape=(224, 224, 3)))
    hModel = bModel.output
    hModel = AveragePooling2D(pool_size=(4, 4))(hModel)
    hModel = Flatten(name="flatten")(hModel)
    hModel = Dense(64, activation="relu")(hModel)
    hModel = Dropout(0.5)(hModel)
    hModel = Dense(2, activation="softmax")(hModel)
    model = Model(inputs=bModel.input, outputs=hModel)
    if is_trn != True:
        return model

    for layer in bModel.layers:
        layer.trainable = False

    return model


def create_vgg_mdl(is_trn):
    bModel = VGG16(weights="imagenet", include_top=False, input_tensor=Input(shape=(224, 224, 3)))
    hModel = bModel.output
    hModel = AveragePooling2D(pool_size=(4, 4))(hModel)
    hModel = Flatten(name="flatten")(hModel)
    hModel = Dense(64, activation="relu")(hModel)
    hModel = Dropout(0.5)(hModel)
    hModel = Dense(2, activation="softmax")(hModel)
    model = Model(inputs=bModel.input, outputs=hModel)

    if is_trn != True:
        return model

    for layer in bModel.layers:
        layer.trainable = False

    return model

and here I tried to mix them:

import my_models as mdl
import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Concatenate

# this is just to unconfuse pycharm
try:
    from cv2 import cv2
except ImportError:
    pass

dense = mdl.create_dense_mdl(False)
dense = tf.keras.models.load_model('Covid_model_dense121.h5')
first_dense = dense.layers[0].input #first layer of dense
dense = dense.layers[-2].output #last layer of dense
dense = Model(first_dense, dense)

vgg = mdl.create_dense_mdl(False)
vgg = tf.keras.models.load_model('Covid_model.h5')
first_vgg = vgg.layers[0].input #first layer of dense
vgg = vgg.layers[-2].output #last layer of dense
vgg = Model(first_vgg, vgg)

conc = Concatenate([dense.output, vgg.output])
mdl = Model(inputs=[dense.input, vgg.input], outputs=conc)

I get this error:

enter image description here

0 Answers
Related