tensorflow - 存储在 Google Cloud 上的巨大 TF 记录文件
问题描述
我正在尝试修改 tensorflow 项目,使其与 TPU 兼容。
为此,我从本网站上解释的代码开始。
这里下载 COCO 数据集,首先使用 InceptionV3 模型提取其特征。我想修改这段代码,使其支持 TPU。
为此,我根据此链接添加了 TPU 的强制代码。
在 TPU 策略范围内,我使用 keras 库创建了 InceptionV3 模型,并根据现有代码加载了带有 ImageNet 权重的模型。
现在,由于 TPU 需要将数据存储在 Google Cloud 存储中,因此我在此链接的帮助下使用 tf.Example 创建了一个 tf 记录文件。
现在,我尝试以多种方式创建此文件,以便它拥有 TPU 将通过 TFRecordDataset 找到的数据。
起初我直接将图像数据和图像路径添加到文件并将其上传到 GCP 存储桶,但在读取这些数据时,我意识到这个图像数据没有用,因为它不包含它需要的形状/大小信息,我有存储前未将其调整到所需尺寸。这个文件大小变成了 2.5GB,这没关系。然后我认为让我们只将图像路径保留在云端,所以我创建了另一个只有图像路径的 tf 记录文件,然后我认为这可能不是优化代码,因为 TPU 将不得不单独打开图像将其调整为 299,299 然后馈送进行建模,如果我通过 TFRecordDataset 中的 .map() 函数获得图像数据会更好,所以我再次尝试,这次使用此链接,将 R、G 和 B 以及图像路径存储在 tf 记录文件中。
但是,现在我看到 tf 记录文件的大小异常大,大约 40-45GB,最终我停止了执行,因为我的内存在 Google Colab TPU 上被填满。
COCO 数据集的原始大小并没有那么大。它几乎像 13GB.. 并且仅使用前 30,000 条记录创建数据集。所以 40GB 看起来很奇怪。
我可以知道这种特征存储方式有什么问题吗?有没有更好的方法将图像数据存储在 TF 记录文件中,然后通过 TFRecordDataset 提取。
解决方案
我认为作为 TFRecords 处理的 COCO 数据集在 GCS 上应该在 24-25 GB 左右。请注意,TFRecord 并不是一种压缩形式,它们将数据表示为 protobuf,因此可以将其最佳加载到 TensorFlow 程序中。
如果您参考:https ://cloud.google.com/tpu/docs/coco-setup(可以在此处找到相应的脚本)将COCO(或子集)转换为TFRecords,您可能会获得更大的成功。
此外,我们在这里使用针对 GPU/TPU 优化的 TF2/Keras 实现了 COCO 检测模型,您可能会发现这对优化输入管道很有用。示例教程可以在这里找到。谢谢!
推荐阅读
- microservices - 如何使用 Consul 连接 spring-boot 微服务
- flutter - Flutter 火种交换卡奇怪的更新行为
- amazon-web-services - 您将如何检查拒绝不安全的传输 IAM 策略是否有效?
- php - foreach 给我错误的结果
- c++ - 如何拆分字符串数组,然后将该拆分数组的每个第一个索引与字符进行比较?
- javascript - join() vs JSON.stringify() with Array full of objects
- wordpress - 获取订单号以将其传递给另一个 woocommerce 插件
- sql - PostgreSQL:未使用的索引导致查询性能不佳?
- python - 破折号/情节歇斯底里地间隔= 500
- swift - 更新选择器 (SwiftUI)