Tensorflow удаляет слои из предварительно обученной модели
Есть ли способ загрузить предварительно обученную модель в Tensorflow и удалить верхние слои в сети? Я смотрю на выпуск Tensorflow r1.10
Единственная документация, которую я смог найти, tf.keras.Sequential.pop
https://www.tensorflow.org/versions/r1.10/api_docs/python/tf/keras/Sequential
Я хочу вручную обрезать предварительно обученную сеть, удалив кучу верхних слоев свертки и добавив пользовательский полностью извилистый слой.
РЕДАКТИРОВАТЬ:
Модель ssd_mobilenet_v1_coco загружена из зоопарка Tensorflow Model. У меня есть доступ как к файлу модели frozen_inference_graph.pb, так и к файлу контрольных точек.
У меня нет доступа к коду Python, который используется для построения модели.
Благодарю.
1 ответ
Из проверки кода, SSDMobileNetV1FeatureExtractor.extract_features
переадресовывает research.slim.nets
:
from nets import mobilenet_v1 # nets will have to be on your PYTHONPATH
with tf.variable_scope('MobilenetV1',
reuse=self._reuse_weights) as scope:
with slim.arg_scope(
mobilenet_v1.mobilenet_v1_arg_scope(
is_training=None, regularize_depthwise=True)):
with (slim.arg_scope(self._conv_hyperparams_fn())
if self._override_base_feature_extractor_hyperparams
else context_manager.IdentityContextManager()):
_, image_features = mobilenet_v1.mobilenet_v1_base(
ops.pad_to_multiple(preprocessed_inputs, self._pad_to_multiple),
final_endpoint='Conv2d_13_pointwise',
min_depth=self._min_depth,
depth_multiplier=self._depth_multiplier,
use_explicit_padding=self._use_explicit_padding,
scope=scope)
mobilenet_v1_base
функция занимает final_endpoint
аргумент. Вместо того, чтобы обрезать построенный граф, просто построите график до конечной точки, которую вы хотите.