在python张量流中打印生成器

时间:2017-01-12 11:03:56

标签: python machine-learning tensorflow

我正在尝试按照link

中所述的tensor flow教程进行操作

我正在尝试按照描述打印预测结果:

print ("Predicted %d, Label: %d" % (classifier.predict(test_data[0]), test_labels[0]))

但我无法打印结果。我收到以下错误。

    print ("Predicted %d, Label: %d" % (classifier.predict(test_data[0]), test_labels[0]))
TypeError: %d format: a number is required, not generator

如何在generator中打印python

我尝试编写循环并迭代它没有工作的元素,我尝试使用next来打印生成器。这也没有用。我该如何打印?

3 个答案:

答案 0 :(得分:6)

这就是我解决它的方式

new_samples = np.array([test_data[8]], dtype=float)

y = list(classifier.predict(new_samples, as_iterable=True))
print('Predictions: {}'.format(str(y)))

print ("Predicted %s, Label: %d" % (str(y), test_labels[8]))

答案 1 :(得分:1)

此处没有tensorflow,所以让我们模拟一个生成器并根据您的print表达式进行测试

In [11]: def predict(a, b):
    ...:     for i in range(10):
    ...:         yield i, i*i
    ...:         

In [12]: print('a:%d, b:%d'%(predict(0, 0)))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-29ec761936ef> in <module>()
----> 1 print('a:%d, b:%d'%(predict(0, 0)))

TypeError: %d format: a number is required, not generator

到目前为止,非常好:我遇到了您遇到的同样问题。

问题是,当你调用生成器函数时得到的不是值而是生成器对象......

您必须使用每次迭代返回的内容(例如,

)迭代生成器对象
In [13]: print('\n'.join('a:%d, b:%d'%(i,j) for i, j in predict(0,0)))
a:0, b:0
a:1, b:1
a:2, b:4
a:3, b:9
a:4, b:16
a:5, b:25
a:6, b:36
a:7, b:49
a:8, b:64
a:9, b:81

或者,如果你不喜欢单行,

In [14]: for i, j in predict(0, 0):
    ...:     print('a:%d, b:%d'%(i,j))
    ...:     
a:0, b:0
a:1, b:1
a:2, b:4
a:3, b:9
a:4, b:16
a:5, b:25
a:6, b:36
a:7, b:49
a:8, b:64
a:9, b:81

换句话说,你有明确地使用生成器正在生成的东西。

答案 2 :(得分:0)

来自documentation

  

运行推理以确定类概率预测。   (弃用的参数)

     

有些论点已被弃用。他们将在2016-09-15之后被删除。   更新说明:predict()的默认行为是   改变。 as_iterable的默认值将更改为True,和   然后该旗帜将被完全删除。这个标志的行为是   如下所述。

尝试:

classifier.predict(x=test_data[0])