【问题标题】:Feeding multiple ``.npy`` files as input into a Keras encoder-decoder model将多个“.npy”文件作为输入输入到 Keras 编码器-解码器模型中
【发布时间】:2021-05-18 00:19:08
【问题描述】:

我正在尝试将两个 .npy 文件输入到 tf.keras 中的编码器-解码器模型中。这些文件很大,不适合内存。要加载数据,我正在尝试以下策略:

mmap_enc = np.load('encoder.npy', mmap_mode='r')
mmap_dec = np.load('decoder.npy', mmap_mode='r')
mmap_target = np.load('target.npy', mmap_mode='r')

encoder_input_data = tf.data.Dataset.from_tensor_slices(mmap_enc ).batch(batch_size)
decoder_input_data = tf.data.Dataset.from_tensor_slices(mmap_dec).batch(batch_size)
target_data = tf.data.Dataset.from_tensor_slices(mmap_target).batch(batch_size)

然后,当我将 encoder_input_datadecoder_input_datatarget_data 提供给模型时

model.fit(
    x=[encoder_input_data, decoder_input_data],
    y=target_data)

我收到以下错误

ValueError: 未能找到可以处理输入的数据适配器: ( 包含类型 {""}),

我确定模型是正确的,因为当我使用少量数组样本时,在保存和加载为 tf.data.Dataset 之前,拟合工作正常。

问候,

【问题讨论】:

  • 我不明白你的策略 - 你仍在尝试将整个文件加载到内存中
  • @Andrey,嗯,我在想通过在mmap 模式下加载文件并使用tf.data.Dataset,整个文件不会加载到内存中。更糟糕的是,它甚至无法正常工作,并将错误抛出提到的错误!

标签: python numpy tensorflow keras tensorflow2.0


【解决方案1】:

您无法提供生成器列表。生成器输出的数据必须从一开始就具有正确的形状。在你的情况下,它会是

((encoder_input, decoder_input), target_data)

您可以使用tf.data.Dataset.zip 实现所需的结构:

encoder_input_data = tf.data.Dataset.from_tensor_slices(mmap_enc )
decoder_input_data = tf.data.Dataset.from_tensor_slices(mmap_dec)
target_data = tf.data.Dataset.from_tensor_slices(mmap_target)
zipped_ds = tf.data.Dataset.zip(((encoder_input_data, decoder_input_data), target_data)).batch(batch_size)

【讨论】:

  • 有效!谢谢!对于教学问题,想知道您是如何得出这个答案的。你读过书/博客吗?
  • Tensorflow 网站上有一个关于如何使用 tf.data 构建数据管道的很好的指南:tf.data: Build TensorFlow input pipelines
  • 让我再问你一个问题。在我读取文件和创建数据集的方式中,整个文件是完全加载到内存中还是只是逐批加载?
  • 我不知道 numpy 的 mmap_mode 如何与 tf.data 相互作用。
猜你喜欢
  • 2021-08-05
  • 2021-07-10
  • 2019-06-14
  • 2019-09-13
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多