Python Tensorflow:故障排除tf.estimator.inputs.numpy\u input\u fn函数

Python Tensorflow:故障排除tf.estimator.inputs.numpy\u input\u fn函数,python,tensorflow,Python,Tensorflow,我正在运行一些教程代码 我可以运行脚本,但当我试图一行一行地运行它,试图了解每个步骤都在做什么时,我在这一步有点困惑: test_input_fn = tf.estimator.inputs.numpy_input_fn( x={WORDS_FEATURE: x_test}, y=y_test, num_epochs=1, shuffle=False) classifier.train(input_fn=train_input_fn, steps=100) 我知道概念上trai

我正在运行一些教程代码

我可以运行脚本,但当我试图一行一行地运行它,试图了解每个步骤都在做什么时,我在这一步有点困惑:

test_input_fn = tf.estimator.inputs.numpy_input_fn(
  x={WORDS_FEATURE: x_test},
  y=y_test,
  num_epochs=1,
  shuffle=False)
classifier.train(input_fn=train_input_fn, steps=100)
我知道概念上train_input_fn正在向training函数提供数据,但我如何手动调用此fn来检查其中的内容

我跟踪了代码,发现train_input_fn函数将数据提供给以下两个变量:

features
Out[15]: {'words': <tf.Tensor 'random_shuffle_queue_DequeueMany:1' shape=(560, 10) dtype=int64>}

labels
Out[16]: <tf.Tensor 'random_shuffle_queue_DequeueMany:2' shape=(560,) dtype=int32>
功能
Out[15]:{'words':}
标签
出[16]:
当我尝试通过执行sess.run(features)来评估features变量时,我的终端似乎被卡住并停止响应

检查这些变量内容的正确方法是什么

谢谢大家!

基于和行为(挂起),我认为底层实现依赖于队列运行程序。队列运行程序未启动时发生挂起。根据以下内容,尝试将会话运行脚本修改为类似以下内容:

或者,我鼓励您查看
tf.data.Dataset
接口(tensorflow 1.3或更早版本中可能的
tf.contrib.data.Dataset
)。您可以获得类似的输入/标签张量,而无需使用带有
数据集的队列。创建要稍微复杂一些,但是接口要灵活得多,并且实现不使用队列运行程序,这意味着会话运行要简单得多

import tensorflow as tf
import numpy as np

x_data = np.random.random((100000, 2))
y_data = np.random.random((100000,))

batch_size = 2
buff = 100


def input_fn():
    # possible tf.contrib.data.Dataset.from... in tf 1.3 or earlier
    dataset = tf.data.Dataset.from_tensor_slices((x_data, y_data))
    dataset = dataset.repeat().shuffle(buff).batch(batch_size)
    x, y = dataset.make_one_shot_iterator().get_next()
    return x, y


x, y = input_fn()
with tf.Session() as sess:
    print(sess.run([x, y]))

谢谢你,杰克。代码在Python3上进行了一些小的修改。我不认为在Tensorflow中只打印一个张量的值就这么复杂,这是因为队列运行器的实现。我已经编辑了我的答案,其中包含了一个数据集示例,您可能会发现它很有用<代码>数据集
s是相对较新的,但一旦你通过了一点样板文件,我发现它们非常简单、强大和快速。谢谢@DomJack。我一定去看看。我发现有时候调试Tensorflow代码非常不直观。
import tensorflow as tf
import numpy as np

x_data = np.random.random((100000, 2))
y_data = np.random.random((100000,))

batch_size = 2
buff = 100


def input_fn():
    # possible tf.contrib.data.Dataset.from... in tf 1.3 or earlier
    dataset = tf.data.Dataset.from_tensor_slices((x_data, y_data))
    dataset = dataset.repeat().shuffle(buff).batch(batch_size)
    x, y = dataset.make_one_shot_iterator().get_next()
    return x, y


x, y = input_fn()
with tf.Session() as sess:
    print(sess.run([x, y]))