我在python上使用tensorflow的估计器库。我想通过训练有素的老师来训练学生网络。我面临以下问题。
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()
,但是它从模型中检索权重,而不是输入和输出
答案 0 :(得分:0)
使用 tf.make_ndarray
将 Tensor 转换为 Numpy_array。
tf.make_ndarray()
,创建一个形状和数据与张量相同的 numpy ndarray。
示例工作代码:
import tensorflow as tf
a = tf.constant([[1,2,3],[4,5,6]])
proto_tensor = tf.make_tensor_proto(a)
tf.make_ndarray(proto_tensor)
输出:
array([[1, 2, 3],
[4, 5, 6]], dtype=int32)
# output has shape (2,3)