首页 > 解决方案 > RuntimeError:无法序列化消息

问题描述

我试图在 google colab 中使用 TPU,所以在以 numpy 格式进行一些预处理后,我试图通过使用转换为 tensorflow 格式 train_setx = tf.data.Dataset.from_tensor_slices(trainx)

它有 90k 大小为 225*225*1 的图像。如果我尝试运行此代码,我会收到此错误

RuntimeError:无法序列化消息`

但是如果我转换另一个 10k 图像的数据集,它可以工作,我在 github 中看到它是因为数据集很大。是这样吗?那么如何转换具有 90k 图像的数据集?

标签: imagetensorflowdeep-learninggoogle-colaboratorytpu

解决方案


那是因为内存的可用性。

如果要训练模型,可以直接使用numpy数组。否则,您也可以使用TFRecordTFRecord有助于有效地读取数据,序列化数据并将其存储在一组文件(每个 100-200MB)中,每个文件都可以线性读取。如果数据通过网络传输,则尤其如此。这对于缓存任何数据预处理也很有用。TFRecord 格式是一种用于存储二进制记录序列的简单格式。

如果您正在处理大型数据集,则使用二进制文件格式存储数据可能会对导入管道的性能产生重大影响,从而影响模型的训练时间。二进制数据在磁盘上占用的空间更少,复制时间更短,并且可以更有效地从磁盘读取。

请阅读有关使用 TFRecord 读取和写入图像的文档 - 演练:读取和写入图像数据

希望这能回答你的问题。快乐学习。


推荐阅读