Я пытаюсь следовать учебнику 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 для печати генератора. Это тоже не сработало. Как мне это распечатать?

4
jgm 12 Янв 2017 в 14:03

3 ответа

Лучший ответ

Вот как я это решил

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]))
6
jgm 12 Янв 2017 в 14:22

Из документации:

Запускает логический вывод для определения вероятностей класса. (устаревшие аргументы)

НЕКОТОРЫЕ АРГУМЕНТЫ УСТАРЕЛИ. Они будут удалены после 2016-09-15. Инструкции по обновлению: Поведение предиката () по умолчанию меняется. Значение по умолчанию для as_iterable изменится на True, а затем флаг будет полностью удален. Поведение этого флага описано ниже.

Пытаться:

classifier.predict(x=test_data[0])
0
Maximilian Peters 12 Янв 2017 в 11:20

Нет 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

Другими словами, у вас есть для явного потребления того, что генерирует генератор.

1
gboffi 12 Янв 2017 в 11:46