将多个“.npy”文件作为输入提供给 Keras 编码器-解码器模型

Feeding multiple ``.npy`` files as input into a Keras encoder-decoder model

我正在尝试将两个 .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: Failed to find data adapter that can handle input: (<class 'list'> containing values of types {"<class 'tensorflow.python.data.ops.dataset_ops.BatchDataset'>"}), <class 'tensorflow.python.data.ops.dataset_ops.BatchDataset'>

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

此致,

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

((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)