Могу ли я получить сеанс тензорного потока от оценщика? - PullRequest
1 голос
/ 04 апреля 2019

Я использую LinearRegressor из tf.estimator и хочу изменить свое затухание скорости обучения (первоначально экспоненциальное затухание) на затухание, использующее потерю. Но для этого мне нужно передать потерю оценки некоторым заполнителям тензора затухания скорости обучения, и на этом этапе мне нужен tf.session.

Я пытался tf.get_default_session() получить сеанс, который выполняется оценщиком, но этот сеанс имеет другой график, используемый оценщиком.


    def my_decay(learning_rate, global_step, decay_step, loss, decay_rate):
      # If loss is not reduced, than decay with decay_rate.

    loss = tf.placeholder(tf.float32)
    estimator = tf.estimator.LinearRegressor(
    feature_columns=feature_columns,
    optimizer==lambda: tf.train.FtrlOptimizer(
        learning_rate=my_decay(learning_rate=0.1,
        global_step=tf.get_global_step(), decay_step=10000,
        loss=loss, decay_rate=0.96)),
      config=sess_config
    )

    for _ in range(n_epoches):
      metrics = tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)
      session.run(loss.assign(metrics['loss']))

С приведенным выше кодом мне нужно получить session от оценщика. Есть ли способ получить это?

Заранее спасибо!

1 Ответ

0 голосов
/ 02 июня 2019

Предполагаемое решение для чего-то подобного - создать подкласс tf.train.SessionRunHook и переопределить метод before_run, чтобы получить подходящий tf.train.SessionRunArgs. Это позволит вам вводить значения во время поезда и добавлять выборки к вызову session.run. Ваш класс должен будет иметь ссылку на заполнитель и состояние loss между вызовами.

Затем вы просто создаете экземпляр класса и добавляете хук к параметру hooks в вашем вызове estimator.train или, в данном случае, в train_spec. Если вы хотите использовать потерю оценки вместо потери обучения, этого можно достичь, добавив еще один хук к eval_spec, который считывает значения в методе after_run.

...