如何使用numpy数组提供DNNClassifier

时间:2017-02-16 05:49:06

标签: python numpy tensorflow

我正在尝试创建一个DNNClassifier,但我不知道如何将数据传递给对象。我的数据文件是使用np.save()创建的.npy文件。

  • 训练数据:形状数组(106398,338),其中106398是数据实例的数量。
  • 训练标签:一个形状数组(106398,97),其中97是我想要预测的类数(热编码)
import tensorflow as tf
from  tensorflow.contrib.learn import DNNClassifier
import numpy as np

feature_columns = np.load(path_to_file)#learn.infer_real_valued_columns_from_input(iris.data)
feature_tags=np.load(path_to_other_file)

classifier = DNNClassifier(hidden_units=[10, 20, 10], n_classes=97, feature_columns=feature_columns)
classifier.fit(feature_columns, feature_tags, steps=200, batch_size=1000)

predictions = list(classifier.predict(feature_columns, as_iterable=True))
score = metrics.accuracy_score(feature_tags, predictions)

print("Accuracy: %f" % score)

我得到:ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

我试图将(feature_columns和feature_tags)同为tf.constant僵尸程序,但它不起作用。

我该如何解决?

8.0 locally Traceback (most recent call last): 
File "nueva.py", line 31, 
    in <module> classifier = DNNClassifier(hidden_units=[10, 20, 10], n_classes=97, feature_columns=feature_columns) 
File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/l‌​earn/python/learn/es‌​timators/dnn.py", line 296, 
    in init self._feature_columns = tuple(feature_columns or []) 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

2 个答案:

答案 0 :(得分:1)

如果查看有关ValueError..的其他SO问题,当您尝试对阵列进行某种True / False测试时,会出现这种情况。

if X>0:....
如果X是多元素数组,

会产生此错误。 X>0是一个True / False值数组。这是模棱两可的。

确定了基本问题后,我们需要找到您正在进行此类测试的地方。

另一件事 - 报告错误时,还要报告堆栈 - 这个错误究竟发生在哪里?

查看您的代码,我没有看到任何可能触发此错误的测试。这意味着它发生在您调用的其中一个函数的深处。 <强>哪些吗

我猜测其中一个函数参数的形式,形状或类型都是错误的。

错误在tuple(feature_columns or [])表达式中。您的feature_columns参数不应该是数组。查看文档。

从这个表达式来看,我猜测feature_columns应该是默认None,或者是[1,2,3]这样的列表:

In [110]: [1,2,3] or []
Out[110]: [1, 2, 3]
In [111]: None or []
Out[111]: []
In [112]: np.array([1,2,3]) or []
....
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
In [113]: 

答案 1 :(得分:0)

使用函数learn.infer_real_valued_columns_from_input从numpy数组创建feature_columns。以下解决方案适用于我:

X = np.load(path_to_file)
feature_columns = tf.contrib.learn.infer_real_valued_columns_from_input(X)
classifier = DNNClassifier(hidden_units=[10, 20, 10], n_classes=97, feature_columns=feature_columns)