如何在Tensorflow数据集中增加数据?

问题描述

对于一组图像,如果术语“数据增强”是要转换当前数据集(例如,crop / flip / rotate / ...),还是要通过添加裁剪的/翻转/旋转图像到初始数据集。据我了解,从这个question和这个one来看,这两者都意味着。如果我错了,请纠正我。

因此,我想使用Tensorflow数据集实现第二个:增加数据量。

我正在使用TFDS中的ImageNet数据(培训集不可用):

import tensorflow_datasets as tfds
ds = tfds.load('imagenet_a',split='test',as_supervised=True)

我想翻转图像:

def transform(image,label):
    image = tf.image.flip_left_right(image)
    return image,label

如果我直接将转换应用于数据集,则效果很好。但这并不会增加数据量:

ds = ds.map(transform)

因此,我尝试创建第二个数据集并将两者连接:

ds0 = ds.map(transform)
ds = ds.concatenate(ds0)

但是出现以下错误

TypeError: Two datasets to concatenate have different types (tf.uint8,tf.int64) and (tf.float32,tf.int64)

是否可以通过串联两个数据集来增加训练集? 还是如何正确做? (或如何解决我的错误

我知道ImageDataGenerator,但其中不包含我想要的转换

解决方法

正如错误明确指出的那样,两个数据集应该具有相同的数据类型,您可以使用 public function updateAuthUserPassword(Request $request) { $this->validate($request,[ 'current' => 'required','newpassword' => 'required','password_confirmation' => 'required|same:newpassword' ]); $user = User::find(Auth::id()); if (!Hash::check($request->current,$user->password)) { return response()->json(['errors' => ['current'=> ['Current password does not match']]],422); } $user->password = Hash::make($request->newpassword); $user->save(); return $user; } 来实现这一点,但是对于大型数据集来说,这是一个繁忙的过程。

您还可以使用tf.data.experimental.sample_from_datasets

合并数据集

下面是带有插图的代码。

tf.cast

原始示例图片:

import tensorflow_datasets as tfds
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from keras.preprocessing.image import img_to_array,array_to_img
ds,info = tfds.load('imagenet_a',split='test',as_supervised=True,with_info=True)

enter image description here

我要拍摄10张图像进行测试,并使用vis = tfds.visualization.show_examples(ds,info) 函数随机翻转这10张图像以创建新的数据集。

map()

合并数据集:

您可以看到合并的数据以及原始图像和随机翻转的图像。 enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...