Как инициализировать веса в функции модели оценщика TensorFlow, используя предварительно обученные переменные?

Я хочу обернуть свою модель с помощью tf.Estimator API TensorFlow, поэтому у меня есть следующие model_fn:

    def model_fn(features, labels, mode, params):
        # Load vocabulary
        n_vocab = params['n_vocab']

        if mode != tf.estimator.ModeKeys.PREDICT:
            labels = tf.reshape(labels, (-1, 1))

        embedding = tf.Variable(tf.random_uniform((tf.cast(n_vocab, tf.int32),
                                                  tf.cast(params['embed_space'], tf.int32)), 0, 1), name='embedding')
        embedding_layer = tf.nn.embedding_lookup(embedding, features[INPUT_TENSOR_NAME], name='embedding_layer')

        ...

Он инициализирует переменные внедрения и делает некоторые другие вещи в будущем. Теперь я не хочу инициализировать эти веса с помощью tf.random_uniform, а использую вес из сохраненной модели, которую я обучал ранее, и замораживаю их, чтобы они не обучались. Как я могу этого добиться?


person Dimitris Poulopoulos    schedule 31.05.2018    source источник


Ответы (1)


Вы можете использовать tf.estimator.WarmStartSettings. Estimator предоставляет простой способ создать это, добавив аргумент с именем warm_start_from.

При создании оценщика необходимо передать каталог сохраненной модели:

estimator = tf.estimator.Estimator(
    model_fn, model_dir, warm_start_from=SAVED_MODEL_DIR)

Просто примечание, вам может понадобиться размороженная версия сохраненной модели.

person kww    schedule 01.06.2018
comment
еще до начала обучения с использованием `tf.estimator.LinearRegressor` нам нужно инициализировать веса для нашей определенной модели, какой API в тензорном потоке делает это? Не могли бы вы указать мне на это? Может быть дело в том, что tf делает это сам по себе, но как и откуда?. Спасибо за ответ, куда загрузить предварительно обученный вес, но откуда инициировать tf в 1-м прогоне, неясно. - person Anu; 25.11.2018