image - RuntimeError:无法序列化消息
问题描述
我试图在 google colab 中使用 TPU,所以在以 numpy 格式进行一些预处理后,我试图通过使用转换为 tensorflow 格式
train_setx = tf.data.Dataset.from_tensor_slices(trainx)
它有 90k 大小为 225*225*1 的图像。如果我尝试运行此代码,我会收到此错误
RuntimeError:无法序列化消息`
但是如果我转换另一个 10k 图像的数据集,它可以工作,我在 github 中看到它是因为数据集很大。是这样吗?那么如何转换具有 90k 图像的数据集?
解决方案
那是因为内存的可用性。
如果要训练模型,可以直接使用numpy
数组。否则,您也可以使用TFRecord。TFRecord
有助于有效地读取数据,序列化数据并将其存储在一组文件(每个 100-200MB)中,每个文件都可以线性读取。如果数据通过网络传输,则尤其如此。这对于缓存任何数据预处理也很有用。TFRecord 格式是一种用于存储二进制记录序列的简单格式。
如果您正在处理大型数据集,则使用二进制文件格式存储数据可能会对导入管道的性能产生重大影响,从而影响模型的训练时间。二进制数据在磁盘上占用的空间更少,复制时间更短,并且可以更有效地从磁盘读取。
请阅读有关使用 TFRecord 读取和写入图像的文档 - 演练:读取和写入图像数据。
希望这能回答你的问题。快乐学习。
推荐阅读
- javascript - 使用Javascript删除地图中的多个键集?
- javascript - 身份验证令牌获取确实存在API问题
- node.js - Nodejs发布视图计数保存数据库
- elasticsearch - elasticsearch:无法解析[文本]类型的字段
- visual-studio - 无法使用“source”命令在 VSCode 上为我的烧瓶应用程序激活环境
- sql - 获取每种产品的最新两条线并获取价格和日期
- swift - Swift UrlSession SSL CLIENT CERTIFICATE 在 1-2 天后停止工作
- reactjs - 如何从使用状态或其他钩子 React JS 中仅获取一个设置状态函数,
- azure - Azure DevOps 工件目录问题
- python - 向现有的 .CSV/Parquet 文件添加新列,而不先加载整个文件并重新保存?