Tensorflow error: Failed to serialize message. For multi-modal dataset

Tensorflow error: Failed to serialize message. For multi-modal dataset

我正在尝试在 Colab 上使用 TPU 训练一个模型,它将接受两个 np.ndarray 输入,一个用于形状图像 (150, 150, 3),另一个用于形状的音频频谱图图像 (259, 128, 1)。现在我已经使用 NumPy 数组创建了我的数据集,如下所示:-

trainX = [train_image_array, train_spect_array]
trainY = labels_array

这里每个的形状如下:-

train_image_array.shape = (86802, 150, 150, 3)
train_spect_array.shape = (86802, 259, 128, 1)
labels_array.shape = (86802,)

我也有一个类似的数据集用于测试,而不是 86K 个样本,它有 9K 个样本。 因此,当我尝试在测试数据上评估我的模型时,它有效,但是当我尝试在训练数据上训练或评估我的模型时,它显示:-

<ipython-input-20-9240f9fc84df> in runModel(model, trainX, trainY, testX, testY, patience, resetWeights, checkpointPath, epochs, save_checkpoint, batch_size, generator, save_weights, save_weights_path, metrics)
     76         model.evaluate(testX, testY, batch_size=batch_size)
     77         # model.evaluate(trainX, trainY, batch_size=batch_size)
---> 78         history = model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, validation_data=(testX, testY), shuffle=True, callbacks=callbacks)
     79         # model.evaluate(trainX, trainY, batch_size=batch_size)
     80         model.evaluate(testX, testY, batch_size=batch_size)

/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py in error_handler(*args, **kwargs)
     65     except Exception as e:  # pylint: disable=broad-except
     66       filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67       raise e.with_traceback(filtered_tb) from None
     68     finally:
     69       del filtered_tb

/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/constant_op.py in convert_to_eager_tensor(value, ctx, dtype)
    100       dtype = dtypes.as_dtype(dtype).as_datatype_enum
    101   ctx.ensure_initialized()
--> 102   return ops.EagerTensor(value, ctx.device_name, dtype)
    103 
    104

这里,runModel(...)是我的功能,它只是由model.evaluatemodel.fit、绘图等组成,主要问题在model.fit(trainX, trainY .. )model.evaluate(trainX, trainY, .. ) 出现同样的错误。我以为它可能只在model.evaluate,所以我评论它,但我错了‍♂️。 谁能帮帮我?

我为这个问题找到的唯一解决方案是,在数据集非常大的情况下,我们应该创建 .tfrecord 文件并使用 TensorFlow 数据集。此外,当与它们一起使用 TPU 时,我们需要使用存储桶将 .tfrecord 文件保存在 Google Cloud Storage 中。