I want to concatenate last layers of VGG and Dense net using a concatenate layers as below, and finally add a svm classifier.
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:

