Прикол в том, что использовалась модель с предобученными ветками VGG16. При использовании этих веток им автоматически назначаются имена, зашитые в описание этих моделей — ‘vgg16’. Поэтому в каждой ветке надо переименовать эти слои (по факту — целые сетки)
Кстати, да, — если отрисовать архитектуру модели, этого не увидеть, потому что там не пишутся имена групп. Там отрисовывается все в максимальной детализации до элементарных слоев.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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' )) |