Преобразовать тензор в NumPy без сеанса - PullRequest
0 голосов
/ 03 сентября 2018

Я использую библиотеку оценки тензорного потока на Python. Я хочу обучать студенческую сеть, используя предварительно подготовленного учителя. У меня возникла следующая проблема.

train_input_fn = tf.estimator.inputs.numpy_input_fn(
  x={"x": train_data},
  y=train_labels,
  batch_size=100,
  num_epochs=None,
  shuffle=True)

student_classifier.train(
  input_fn=train_input_fn,
  steps=20,
  hooks=None)

Этот код возвращает объект-генератор, который передается в классификатор ученика. Внутри генератора у нас есть входы и метки (партиями по 100) как тензоры. Проблема в том, что я хочу передать те же значения в модель учителя и извлечь ее выходные данные softmax. Но, к сожалению, для ввода модели требуется массив numpy, как показано ниже

student_classifier = tf.estimator.Estimator(
  model_fn=student_model_fn, model_dir="./models/mnist_student")

def student_model_fn(features, labels, mode): 
  sess=tf.InteractiveSession()
  tf.train.start_queue_runners(sess)
  data=features['x'].eval()
  out=labels.eval()
  sess.close()

  input_layer = tf.reshape(features["x"], [-1, 28, 28, 1])
  eval_teacher_fn = tf.estimator.inputs.numpy_input_fn(
      x={"x":data},
      y=out,
      num_epochs=1,
      shuffle=False)

Для этого требуется, чтобы x и y были массивами numpy, поэтому я конвертировал его с помощью такого уродливого хака, как использование сеанса для преобразования тензора в numpy. Есть ли лучший способ сделать это?

P.S. Я попытался tf.estimator.Estimator.get_variable_value(), но он извлекает вес из модели, а не вход и выход

...