Хорошо ... Я думаю, что вы следуете этому учебнику , который, по моему мнению, был написан кем-то, кто на самом деле не самый лучший пользователь Keras.
Упомянутый пользовательский слойсозданный руководством, когда они изменяют исходный код keras (, пожалуйста, не делайте этого, это не безопасный способ работы и создаст проблемы в ваших будущих проектах )
Пользовательскийслой создан в этой части урока:
`Add in "<model>.py"
...
...
if include_top:
# Classification block
x = GlobalAveragePooling2D(name='avg_pool')(x)
x = Dense(classes, activation='softmax', name='predictions')(x)
else:
if pooling == 'avg':
x = GlobalAveragePooling2D()(x)
elif pooling == 'max':
x = GlobalMaxPooling2D()(x)
x = Flatten(name='custom')(x)
...
Комментарии:
- Это абсолютно не нужно.Выходы из глобальных пулов уже сведены.
- Это опасно для ваших будущих проектов, так как вы меняете исходный код keras.
Вы можете сделать то же самое, не создавая этот плоский слой, просто взяв последний слоймодель:
lastLayer = base_model.layers[-1]
Еще больше: если целевой слой последний, вам это не нужно.Просто используйте base_model
как есть.
Если вы хотите получить полную модель со слоем Dense
в конце, просто используйте include_top=True
.
Если вам нужно произвольное количество классов, сообщите об этом конструктору модели.
Если вы хотите настоящий промежуточный слой, найдите имя слоя, позвонив по номеру model.summary()
.