我正在尝试从具有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。这是错误的原因吗?
该generator
参数(可能令人困惑)实际上不应该是一个生成器,而是一个可返回可迭代对象的可调用函数(例如,生成器函数)。可能最简单的选择是使用lambda
。此外,还有一些错误:1)tf.data.Dataset.from_generator
旨在被称为类工厂方法,而不是从实例中调用2)函数(类似于TensorFlow中的其他一些函数)对参数感到奇怪,并且希望您给出序列的dtype和每个数据行为tuple
s(而不是list
CSV阅读器返回的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))