Оценщики TensorFlow и тяжелые предварительно обученные модели: повторное использование между вызовами? - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь использовать трансферное обучение на основе предварительно обученной модели в 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
...