Tensorflow输入函数在K-means聚类时的错误

这是一个简单的代码,用于创建一个Tensorflow图来聚类鸢尾花数据。它使用tf.estimator.inputs.numpy_input_fn来为tf.contrib.learn.KMeansClustering k-means聚类器定义一个输入函数。

但是Tensorflow返回了以下错误:

...AssertionError: Tensor("random_shuffle_queue_DequeueMany:2", shape=(4,), dtype=int64)

你知道我为什么会得到这个错误,以及如何调试它吗?

iris.csv:

150,4,setosa,versicolor,virginica6.4,2.8,5.6,2.2,25.0,2.3,3.3,1.0,14.9,2.5,4.5,1.7,24.9,3.1,1.5,0.1,05.7,3.8,1.7,0.3,04.4,3.2,1.3,0.2,05.4,3.4,1.5,0.4,06.9,3.1,5.1,2.3,26.7,3.1,4.4,1.4,15.1,3.7,1.5,0.4,05.2,2.7,3.9,1.4,16.9,3.1,4.9,1.5,15.8,4.0,1.2,0.2,05.4,3.9,1.7,0.4,07.7,3.8,6.7,2.2,26.3,3.3,4.7,1.6,16.8,3.2,5.9,2.3,27.6,3.0,6.6,2.1,26.4,3.2,5.3,2.3,25.7,4.4,1.5,0.4,06.7,3.3,5.7,2.1,26.4,2.8,5.6,2.1,25.4,3.9,1.3,0.4,06.1,2.6,5.6,1.4,27.2,3.0,5.8,1.6,25.2,3.5,1.5,0.2,05.8,2.6,4.0,1.2,15.9,3.0,5.1,1.8,25.4,3.0,4.5,1.5,16.7,3.0,5.0,1.7,16.3,2.3,4.4,1.3,15.1,2.5,3.0,1.1,16.4,3.2,4.5,1.5,16.8,3.0,5.5,2.1,26.2,2.8,4.8,1.8,26.9,3.2,5.7,2.3,26.5,3.2,5.1,2.0,25.8,2.8,5.1,2.4,25.1,3.8,1.5,0.3,04.8,3.0,1.4,0.3,07.9,3.8,6.4,2.0,25.8,2.7,5.1,1.9,26.7,3.0,5.2,2.3,25.1,3.8,1.9,0.4,04.7,3.2,1.6,0.2,06.0,2.2,5.0,1.5,24.8,3.4,1.6,0.2,07.7,2.6,6.9,2.3,24.6,3.6,1.0,0.2,07.2,3.2,6.0,1.8,25.0,3.3,1.4,0.2,06.6,3.0,4.4,1.4,16.1,2.8,4.0,1.3,15.0,3.2,1.2,0.2,07.0,3.2,4.7,1.4,16.0,3.0,4.8,1.8,27.4,2.8,6.1,1.9,25.8,2.7,5.1,1.9,26.2,3.4,5.4,2.3,25.0,2.0,3.5,1.0,15.6,2.5,3.9,1.1,16.7,3.1,5.6,2.4,26.3,2.5,5.0,1.9,26.4,3.1,5.5,1.8,26.2,2.2,4.5,1.5,17.3,2.9,6.3,1.8,24.4,3.0,1.3,0.2,07.2,3.6,6.1,2.5,26.5,3.0,5.5,1.8,25.0,3.4,1.5,0.2,04.7,3.2,1.3,0.2,06.6,2.9,4.6,1.3,15.5,3.5,1.3,0.2,07.7,3.0,6.1,2.3,26.1,3.0,4.9,1.8,24.9,3.1,1.5,0.1,05.5,2.4,3.8,1.1,15.7,2.9,4.2,1.3,16.0,2.9,4.5,1.5,16.4,2.7,5.3,1.9,25.4,3.7,1.5,0.2,06.1,2.9,4.7,1.4,16.5,2.8,4.6,1.5,15.6,2.7,4.2,1.3,16.3,3.4,5.6,2.4,24.9,3.1,1.5,0.1,06.8,2.8,4.8,1.4,15.7,2.8,4.5,1.3,16.0,2.7,5.1,1.6,15.0,3.5,1.3,0.3,06.5,3.0,5.2,2.0,26.1,2.8,4.7,1.2,15.1,3.5,1.4,0.3,04.6,3.1,1.5,0.2,06.5,3.0,5.8,2.2,24.6,3.4,1.4,0.3,04.6,3.2,1.4,0.2,07.7,2.8,6.7,2.0,25.9,3.2,4.8,1.8,15.1,3.8,1.6,0.2,04.9,3.0,1.4,0.2,04.9,2.4,3.3,1.0,14.5,2.3,1.3,0.3,05.8,2.7,4.1,1.0,15.0,3.4,1.6,0.4,05.2,3.4,1.4,0.2,05.3,3.7,1.5,0.2,05.0,3.6,1.4,0.2,05.6,2.9,3.6,1.3,14.8,3.1,1.6,0.2,06.3,2.7,4.9,1.8,25.7,2.8,4.1,1.3,15.0,3.0,1.6,0.2,06.3,3.3,6.0,2.5,25.0,3.5,1.6,0.6,05.5,2.6,4.4,1.2,15.7,3.0,4.2,1.2,14.4,2.9,1.4,0.2,04.8,3.0,1.4,0.1,05.5,2.4,3.7,1.0,15.9,3.0,4.2,1.5,16.9,3.1,5.4,2.1,25.1,3.3,1.7,0.5,06.0,3.4,4.5,1.6,15.5,2.5,4.0,1.3,16.2,2.9,4.3,1.3,15.5,4.2,1.4,0.2,06.3,2.8,5.1,1.5,25.6,3.0,4.1,1.3,16.7,2.5,5.8,1.8,27.1,3.0,5.9,2.1,24.3,3.0,1.1,0.1,05.6,2.8,4.9,2.0,25.5,2.3,4.0,1.3,16.0,2.2,4.0,1.0,15.1,3.5,1.4,0.2,05.7,2.6,3.5,1.0,14.8,3.4,1.9,0.2,05.1,3.4,1.5,0.2,05.7,2.5,5.0,2.0,25.4,3.4,1.7,0.2,05.6,3.0,4.5,1.5,16.3,2.9,5.6,1.8,26.3,2.5,4.9,1.5,15.8,2.7,3.9,1.2,16.1,3.0,4.6,1.4,15.2,4.1,1.5,0.1,06.7,3.1,4.7,1.5,16.7,3.3,5.7,2.5,26.4,2.9,4.3,1.3,1

回答:

你不能将tf.estimator.inputs.numpy_input_fn传递给任何tf.contrib类,因为它不会返回特征和标签,而是返回一个封装了这两者的对象。

在使用较旧的contrib类时,最好的选择是自己编写输入函数。方法如下:

def make_numpy_input_fn(x, y, batch_size):  def input_fn():    features, labels = tf.train.shuffle_batch(                             [tf.constant(x), tf.constant(y)],                             batch_size=batch_size,                              capacity=50*batch_size,                             min_after_dequeue=20*batch_size,                             enqueue_many=True)    features = {'x': features}    return features, labels  return input_fn

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注