给定 npy 文件名列表
x
:
x = ['path/to/file1.npy', 'path/to/file2.npy']
和标签列表
y
:
y = [1, 0]
我想创建一个张量流
Dataset
,它由成对的标签以及 npy 文件中包含的加载和转换的 numpy 数组组成。
Dataset
及其相应的标签。Dataset
,因为文件太大,无法一次加载到内存中。来自大量 .npy 文件的 Tensorflow 数据集
a) 没有提供关于如何构建加载映射函数的明确指导,b) 重点关注仅处理数组而不处理其相应标签的函数。
以内存高效的方式使用 tf.data.Dataset 加载数据的最佳方法是什么
这个答案没有提供我所询问的内容(加载
x
和 y
的映射函数,以及 x 的转换),而是提供了该函数的占位符(PARSE_FUNCTION
)。
tf.py_function
包装器才能使用非 Tensorflow 函数。您不能直接在 .map
方法中使用非 TF 函数。 (大部分代码来自这个问题):
def load_files_py(train_filenames, width, height):
image = np.load(train_filenames)
image = skimage.transform.resize(array, (height, width))
return image
def parse_function(image_filenames, labels):
image = tf.py_function(load_files_py, inp=[image_filenames, width, height], Tout=[tf.float32])
return image, label
dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))
dataset = dataset.map(parse_function, num_parallel_calls=PARALLEL_CALLS)
您很可能是指
sklearn.transform.resize
。 sklearn.io.resize 不存在。如果您想保留通道数,则不要将其作为参数给出。num_parallel_calls
在这里可能没用,因为tf.py_function
获取Python GIL(全局解释器锁),这会阻止多线程。
您可以关闭
sklearn.transform.resize
并使用 tf.image.resize
,或直接在模型中使用 tf.keras.layers.Resize
。 它们实际上是相同的。