Оценщики TensorFlow и тяжелые предварительно обученные модели: повторное использование через вызовы?
Я пытаюсь использовать трансферное обучение на основе предварительно обученной модели в TensorFlow - с помощью Estimator API. Детали модели (количество слоев, нейронов и т. Д.) Изменятся и не будут актуальны.
get_feature_extractor() создает экземпляр модуля TensorFlow Hub. В конечном итоге происходит то, что каждый вызов.train_and_evaluate(), .predict() и т. Д. Уничтожает сессию и график и запускается с нуля, перезагружая экстрактор функций. Это займет несколько секунд. Есть ли чистый способ сохранить результаты get_feature_extractor() через эти вызовы и заставить его удерживать сеанс - по крайней мере, для.predict()? Или мне придется использовать API более низкого уровня для достижения этой цели?
def model_fn(features, labels, mode):
feature_extractor = get_feature_extractor()
layer = feature_extractor(features)
layer = tf.layers.batch_normalization(layer)
layer = tf.layers.dense(inputs=layer, units=1280, activation=tf.nn.relu)
layer = tf.layers.dense(inputs=layer, units=2048, activation=tf.nn.relu)
layer = tf.layers.dense(inputs=layer, units=512, activation=tf.nn.relu)
layer = tf.layers.dense(inputs=layer, units=2)
if mode == tf.estimator.ModeKeys.PREDICT:
estimator = tf.estimator.EstimatorSpec(mode, predictions=layer)
else:
accuracy = tf.metrics.accuracy(labels=labels,
predictions=layer,
name='acc_op')
metrics = {'accuracy': accuracy}
loss = tf.losses.mean_squared_error(labels=labels, predictions=layer)
optimizer = tf.train.AdamOptimizer()
train_op = optimizer.minimize(loss=loss, global_step=tf.train.get_global_step())
estimator = tf.estimator.EstimatorSpec(
mode=mode, loss=loss, train_op=train_op,
eval_metric_ops=metrics)
return estimator