Прикол в том, что использовалась модель с предобученными ветками VGG16. При использовании этих веток им автоматически назначаются имена, зашитые в описание этих моделей — ‘vgg16’. Поэтому в каждой ветке надо переименовать эти слои (по факту — целые сетки)
Кстати, да, — если отрисовать архитектуру модели, этого не увидеть, потому что там не пишутся имена групп. Там отрисовывается все в максимальной детализации до элементарных слоев.
import keras
from keras.applications import VGG16
from keras import models
from keras.models import Sequential, Model
from keras.layers import Flatten, concatenate, Concatenate, Merge
from keras.utils import plot_model
conv_base1 = VGG16(weights='imagenet', include_top=False, input_shape=(100, 100, 3))
conv_base2 = VGG16(weights='imagenet', include_top=False, input_shape=(100, 100, 3))
for l in conv_base1.layers:
l.name = l.name+"_branch1"
for l in conv_base2.layers:
l.name = l.name+"_branch2"
branch1 = Sequential()
branch1.add(conv_base1)
branch1.add(Flatten())
branch1.layers[0].name = branch1.layers[0].name + "_branch1"
branch2 = models.Sequential()
branch2.add(conv_base2)
branch2.add(Flatten())
branch2.layers[0].name = branch2.layers[0].name + "_branch2"
model = models.Sequential()
model.add(Merge([branch1, branch2], mode='concat'))
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))