Я использую библиотеку оценки тензорного потока на 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()
, но он извлекает вес из модели, а не вход и выход