当前位置:  开发笔记 > 编程语言 > 正文

如何使生成器可调用?

如何解决《如何使生成器可调用?》经验,为你挑选了1个好方法。

我正在尝试从具有784位长行的CSV文件创建数据集。这是我的代码:

import tensorflow as tf

f = open("test.csv", "r")
csvreader = csv.reader(f)
gen = (row for row in csvreader)
ds = tf.data.Dataset()
ds.from_generator(gen, [tf.uint8]*28**2)

我收到以下错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
     12 gen = (row for row in csvreader_pat_trn)
     13 ds = tf.data.Dataset()
---> 14 ds.from_generator(gen, [tf.uint8]*28**2)

~/Documents/Programming/ANN/labs/lib/python3.6/site-packages/tensorflow/python/data/ops/dataset_ops.py in from_generator(generator, output_types, output_shapes)
    317     """
    318     if not callable(generator):
--> 319       raise TypeError("`generator` must be callable.")
    320     if output_shapes is None:
    321       output_shapes = nest.map_structure(

TypeError: `generator` must be callable.

该文档说我应该传递给发电机from_generator(),让我做什么的,gen是一台发电机。但是现在它抱怨我的生成器不可调用。如何使生成器可调用,以便使它起作用?

编辑: 我想补充一点,我正在使用python 3.6.4。这是错误的原因吗?



1> jdehesa..:

generator参数(可能令人困惑)实际上不应该是一个生成器,而是一个可返回可迭代对象的可调用函数(例如,生成器函数)。可能最简单的选择是使用lambda。此外,还有一些错误:1)tf.data.Dataset.from_generator旨在被称为类工厂方法,而不是从实例中调用2)函数(类似于TensorFlow中的其他一些函数)对参数感到奇怪,并且希望您给出序列的dtype和每个数据行为tuples(而不是listCSV阅读器返回的s),您可以使用例如map

import csv
import tensorflow as tf

with open("test.csv", "r") as f:
    csvreader = csv.reader(f)
    ds = tf.data.Dataset.from_generator(lambda: map(tuple, csvreader),
                                        (tf.uint8,) * (28 ** 2))

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有