I used the following code to save both a trained and an untrained model. def skip_block(base, skip, filters): x = Concatenate()(\[base, skip\]) x = Conv2D(filters, (2, 2), padding="same", activation="relu")(x) x = Conv2D(filters, (2, 2), padding="same", activation="relu")(x) return x def build_model(img_size): inp = Input(shape=(img_size, img_size, 3), name="image_input") # Load pre-trained model encoder = MobileNetV2(input_tensor=inp, weights="imagenet", include_top=False, alpha=0.5) for layer in encoder.layers: layer.trainable = True skips = ["image_input", "block_1_expand_relu", "block_3_expand_relu", "block_6_expand_relu"] x = encoder.get_layer("block_13_expand_relu").output for i, filters in zip(reversed(skips), [256, 128, 64, 32]): x = UpSampling2D((2, 2))(x) x = merge_skip_block(x, encoder.get_layer(i).output, filters) out = Conv2D(NUM_MASKS, (1, 1), activation="sigmoid")(x) return Model(inp, out) I want to combine the predictions of each layer from the trained model with the input of the same layer in the untrained model to generate an improved combined prediction. This updated output should then be passed to the next layer in the untrained model. I have tried the following so far, i am unsure how to proceed next. def create_combined_model(IMAGE_SIZE): input_layer = Input(shape=(IMAGE_SIZE, IMAGE_SIZE, 3), name="input_image") # Load both models trained_model = load_model('path/to/trained_model.keras') untrained_model = load_model('path/to/untrained_model.keras') # Create intermediate models to get layer outputs/inputs trained_features = Model( inputs=trained_model.input, outputs=[layer.output for layer in trained_model.layers[1:]] ) untrained_features = Model( inputs=untrained_model.input, outputs=[layer.input for layer in untrained_model.layers[1:]] ) # Get all features using the same input trained_outputs = trained_features(input_layer) untrained_inputs = untrained_features(input_layer) Continue reading...