【发布时间】:2021-07-08 09:02:54
【问题描述】:
我正在努力解决以下问题。我正在使用 from_generator 方法创建一个 tf.data.Dataset。它工作得很好,但在预测之后,我想调查哪些样本被错误分类以及为什么。为此,我需要按照它们被提供给模型的相同顺序来检索文件名。我该怎么做?
def make_dataset(directory):
""" Makes a dataset from generator. """
def generator():
files = list_files_in_directory(directory)
random.Random(42).shuffle(files)
print(f'Files in {directory}: {len(files)}')
for fn in files:
X, y = read_file(fn)
yield X, [y] # here I lose info about fn
def get_shapes():
X, _ = next(generator())
return tf.TensorShape(X.shape), tf.TensorShape(1)
return (
tf.data.Dataset
.from_generator(
generator,
output_types=(tf.float64, tf.uint8),
output_shapes=get_shapes())
.batch(128, drop_remainder=True)
.prefetch(256))
model.fit(make_dataset(directory_train))
y_pred = model.predict(make_dataset(directory_test))
# here: what is the most elegant way to retain the input filenames for y_pred ?
附:由于文件是在“惰性”模式下读取的,因此需要生成器中的 shuffle 以确保输入数据的随机性。
【问题讨论】:
-
您能分享一下您的实际用例吗?我认为可能有更优雅的解决方案
标签: python tensorflow dataset generator lazy-evaluation