如何使用_OptionsDataset进行数据扩充?

时间:2020-09-05 00:19:19

标签: python numpy tensorflow

您好,我正在学习GANS和深度学习,总的来说,当我与NumPy图像数组一起工作时,但是对于本次作业,我通过以下方式获得了tfds的数据:

test_split, valid_split, train_split = tfds.Split.TRAIN.subsplit([10, 15, 75])
test_set_raw = tfds.load('cats_vs_dogs', split=test_split,  as_supervised=True)
valid_set_raw = tfds.load('cats_vs_dogs', split=valid_split,  as_supervised=True)
train_set_raw = tfds.load('cats_vs_dogs', split=train_split,  as_supervised=True)

问题是我想使用其中的一些示例进行数据增强,但是我无法仅通过take()访问这些_OptionsDataset上的每个图像,但是我想对此进行迭代,从而使每个图片并添加此新闻图片。

我可以使用NumPy和两个数组来执行此操作,但是我不知道如何使用_OptionsDataset来执行此操作。

这可能吗?我该怎么办?是否可以将_OptionsDataset转换为NumPy数组,然后再次将NumPy数组转换为_OptionsDataset?

谢谢

1 个答案:

答案 0 :(得分:1)

tf.image可以使用很多随机转换,您不需要Numpy。这是一个例子。由于我有另一个版本,因此必须对拆分进行一些不同的选择。这是tf.image的{​​{3}}。

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf
import tensorflow_datasets as tfds

[train_set_raw] = tfds.load('cats_vs_dogs', split=['train[:100]'],  as_supervised=True)


def augment(tensor):
    tensor = tf.cast(x=tensor, dtype=tf.float32)
    tensor = tf.image.rgb_to_grayscale(images=tensor)
    tensor = tf.image.resize(images=tensor, size=(96, 96))
    tensor = tf.divide(x=tensor, y=tf.constant(255.))
    tensor = tf.image.random_flip_left_right(image=tensor)
    tensor = tf.image.random_brightness(image=tensor, max_delta=2e-1)
    tensor = tf.image.random_crop(value=tensor, size=(64, 64, 1))
    return tensor


train_set_raw = train_set_raw.shuffle(128).map(lambda x, y: (augment(x), y)).batch(16)

import matplotlib.pyplot as plt

plt.imshow((next(iter(train_set_raw))[0][0][..., 0].numpy()*255).astype(int))
plt.show()

documentation enter image description here