将多个“.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_data
、decoder_input_data
和 target_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)
我正在尝试将两个 .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_data
、decoder_input_data
和 target_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)