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.evaluate
、model.fit
、绘图等组成,主要问题在model.fit(trainX, trainY .. )
。
model.evaluate(trainX, trainY, .. )
出现同样的错误。我以为它可能只在model.evaluate
,所以我评论它,但我错了♂️。
谁能帮帮我?
我为这个问题找到的唯一解决方案是,在数据集非常大的情况下,我们应该创建 .tfrecord 文件并使用 TensorFlow 数据集。此外,当与它们一起使用 TPU 时,我们需要使用存储桶将 .tfrecord 文件保存在 Google Cloud Storage 中。
我正在尝试在 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.evaluate
、model.fit
、绘图等组成,主要问题在model.fit(trainX, trainY .. )
。
model.evaluate(trainX, trainY, .. )
出现同样的错误。我以为它可能只在model.evaluate
,所以我评论它,但我错了♂️。
谁能帮帮我?
我为这个问题找到的唯一解决方案是,在数据集非常大的情况下,我们应该创建 .tfrecord 文件并使用 TensorFlow 数据集。此外,当与它们一起使用 TPU 时,我们需要使用存储桶将 .tfrecord 文件保存在 Google Cloud Storage 中。