gpt4 book ai didi

python - 在 Tensorflow 中为输入和输出保留相同的数据集扩充

转载 作者:行者123 更新时间:2023-12-02 16:30:28 26 4
gpt4 key购买 nike

我有一个包含图像作为输入和输出的批处理数据集。代码是这样的:

os.chdir(r'E:/trainTest')

def process_img(file_path):
img = tf.io.read_file(file_path)
img = tf.image.decode_png(img, channels=3)
img = tf.image.convert_image_dtype(img, tf.float32)
img = tf.image.resize(img, size=(img_height, img_width))
return img

x_files = glob('input/*.png')
y_files = glob('output/*.png')

files_ds = tf.data.Dataset.from_tensor_slices((x_files, y_files))


#Dataset which gives me input-output
files_ds = files_ds.map(lambda x, y: (process_img(x), process_img(y))).batch(batch_size)

#model init etc
#----

model.fit(files_ds,epochs=25)

问题是我的模型没有足够的图像。所以我的问题是,如何从 files_ds 创建增强图像(如翻转、旋转、缩放等)?因为必须以与输入图像相同的方式来增强输出图像。

这个问题实际上来自以下问题,我想在它自己的部分问这个问题:
Tensorflow image_dataset_from_directory for input dataset and output dataset

最佳答案

tf.image有一堆你可以使用的随机转换。例如:

这是一个关于猫的完全随机图像的示例。

from skimage import data
import matplotlib.pyplot as plt
import tensorflow as tf

cat = data.chelsea()

plt.imshow(cat)
plt.show()

enter image description here

图像转换:

from skimage import data
import matplotlib.pyplot as plt
import tensorflow as tf

cat = data.chelsea()

plt.imshow(tf.image.random_hue(cat, .2, .5))
plt.show()

enter image description here

您可以像这样在您的 tf.data.Dataset 中实现它:

def process_img(file_path):
img = tf.io.read_file(file_path)
img = tf.image.decode_png(img, channels=3)
img = tf.image.convert_image_dtype(img, tf.float32)
img = tf.image.resize(img, size=(img_height, img_width))
img = tf.image.random_hue(img, 0., .5) # Here
return img

我找到了一种在图形模式下保持相同转换的方法。它基本上是在同一次调用中将两个图像传递给更改器(mutator)。

import os
import tensorflow as tf
os.chdir(r'c:/users/user/Pictures')
from glob2 import glob
import matplotlib.pyplot as plt

x_files = glob('inputs/*.jpg')
y_files = glob('targets/*.jpg')

files_ds = tf.data.Dataset.from_tensor_slices((x_files, y_files))

def load(file_path):
img = tf.io.read_file(file_path)
img = tf.image.decode_jpeg(img, channels=3)
img = tf.image.convert_image_dtype(img, tf.float32)
img = tf.image.resize(img, size=(28, 28))
return img

def process_img(file_path1, file_path2):
img = tf.stack([load(file_path1), load(file_path2)])
img = tf.image.random_hue(img, max_delta=.5)
return img[0], img[1]

files_ds = files_ds.map(lambda x, y: process_img(x, y)).batch(1)

a, b = next(iter(files_ds))

plt.imshow(a[0, ...])
plt.imshow(b[0, ...])

关于python - 在 Tensorflow 中为输入和输出保留相同的数据集扩充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63581973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com