tensorflow - 将 tfds.load 数据集以 jpg 格式下载到本地磁盘
问题描述
我想将完整的猫狗数据集下载到我的电脑上并拥有实际的 jpg 文件。我可以直接从例如 Microsoft 下载它,但是我想使用 tfds.load 数据集函数。
当我尝试:
(raw_train, raw_validation, raw_test), metadata = tfds.load(
'cats_vs_dogs',
split=['train[:80%]', 'train[80%:90%]', 'train[90%:]'],
with_info=True,
as_supervised=True,
data_dir=r'D:\TFProjects\catsdogscompl')
它确实下载了一些东西,但是这些是 TFRECORD 文件,而不是 jpg。我怎样才能得到实际的jpgs?
解决方案
TFDS 实际上返回 tf.data.Dataset。如主页所述
所有数据集都公开为 tf.data.Datasets ,从而实现易于使用和高性能的输入管道。
但是您实际上可以加载数据集并将其手动保存在 jpeg 中。
import tensorflow as tf
import tensorflow_datasets as tfds
from uuid import uuid1
import os
import warnings
(raw_train, raw_validation, raw_test), metadata = tfds.load(
'cats_vs_dogs',
split=['train[:80%]', 'train[80%:90%]', 'train[90%:]'],
with_info=True,
data_dir=r'D:\TFProjects\catsdogscompl')
def save_dataset_as_jpegs(dataset, path,):
"""
saves every image to the 'path' using random name + target
:param dataset: dataset you want to save
:param path: where you want to store it
:param metadata: metadata from dataset. required to get class names.
:return: Nothing. Just saves the dataset as jpegs.
"""
for obj in dataset:
im, name = obj['image'], obj['image/filename']
serialized_im = tf.image.encode_jpeg(im)
path_and_name = os.path.join(path, name.numpy().decode())
tf.io.write_file(path_and_name, serialized_im)
save_dataset_as_jpegs(raw_train, 'jpegs_train/')
save_dataset_as_jpegs(raw_validation, 'jpegs_validation/')
save_dataset_as_jpegs(raw_test, 'jpegs_test/')
此代码将 raw_test 数据集保存到文件夹 jpegs_test。
推荐阅读
- java - 像 keyup/down 这样的事件监听器是否需要在 java 中处理?
- javascript - 如何在实际保存之前使用 Cloud Code 读取保存到 Parse 服务器的文件?
- ios - 为什么当我使用 nativescript 从 iOS 发送表情符号字符时会收到陌生字符串
- javascript - 使用 Extjs3 在组合框中动态加载 json 数据
- python - SQL Alchemy:选择查询中的“u”是什么
- java - 创建一个显示对象数组中的 getter 的类
- sql - 如果今年的数据不可用,如何上传上一年的数据
- mysql - 根据时间间隔查询获取计数值
- rest - Microsoft Graph API - 获取组所有者详细信息以及 azure 中的组详细信息
- flutter - 具有动态容器高度的 TabBarView