Keras2图像数据生成器或TensorFlow tf.data?

du7egjpx  于 2022-11-13  发布在  其他
关注(0)|答案(4)|浏览(204)

随着Keras2即将在TensorFlow和TensorFlow 2.0中实施,您是否应该将Keras ImageDataGenerator与TensorFlow中的flow_from_directorytf.data配合使用,后者现在也可以与Keras的fit_genearator配合使用?
这两种方法是否会因为服务于不同的目的而有各自的位置,或者tf.data是否会成为未来的新方法,Keras生成器是否会在未来被弃用?
谢谢,我想采取的道路,使我跟上最新的一点更长的时间在这个快速发展的领域。

6ie5vjzr

6ie5vjzr1#

除了自定义的Python生成器,你还可以将来自Keras的ImageDataGenerator Package 在tf.data中。
TensorFlow >= 2.10(一切都与tf.data.Dataset()有关)

# Treat it as a normal tf.data.Dataset()
   dataset = tf.keras.utils.image_dataset_from_directory (...)
   # Or any other augmentation
   normalization_layer = tf.keras.layers.Rescaling(1./255)
   normalized_dataset = dataset.map(lambda x, y: (normalization_layer(x), y))

TensorFlow <= 2.9(其中可能已显示弃用警告)以下代码片段摘自TensorFlow 2.0文档。

img_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255, rotation_range=20)
ds = tf.data.Dataset.from_generator(
    img_gen.flow_from_directory, args=[flowers], 
    output_types=(tf.float32, tf.float32), 
    output_shapes = ([32,256,256,3],[32,5])
)

因此,仍然可以使用典型的Keras ImageDataGenerator,您只需要像上面一样将其 Package 成tf.data.Dataset

axkjgtzd

axkjgtzd2#

自发布以来,TensorFlow数据集API是默认推荐的方式,可用于为TensorFlow后端构建的任何模型构建输入管道,包括Keras和低级TensorFlow。在TF 1.xx的后续版本中,它可直接用于tf.keras.Model.fit方法,如

model.fit(dataset, epochs)

这对于快速原型制作

dataset = tf.data.Dataset.from_tensor_slices((train, test))
dataset = dataset.shuffle().repeat().batch()

用于构建复杂、高性能的ETL管道4.升级您的数据输入管道,更多信息请点击此处https://www.tensorflow.org/guide/performance/datasets
根据官方文档,在TF 2.0中,这也将是默认的向模型输入数据的方式。https://www.tensorflow.org/alpha/guide/migration_guide
默认情况下,即将发布的TensorFlow版本将被急切地执行,数据集对象将变为可迭代的,并且将更易于使用。

mwngjboj

mwngjboj3#

对我来说,我更喜欢用yield构建一个生成器:

def generator(batch_size=4,path):
imgs=glob(path+'*.jpg')
while True:
    batch=[]
    for i in range(batch_size):
        idx=np.random.randint(0,len(imgs))
        img=cv.resize(cv.imread(imgs[idx]),(256,256))/255
        batch.append(img)
    batch=np.array(batch)
    yield batch

然后创建生成器并将其输入到model.fit_generator,它将工作。
你可以像这样随机选择数据,也可以使用一些重复的方法。
虽然代码很粗糙,但很容易修改,因此可以生成复杂的批处理。
请注意,这是一种使用Keras2而非TensorFlow 2.0为TF 1.X生成的方法。

62lalag4

62lalag44#

2022更新

访问ImageDataGenerator documentation时,现在会显示一条过时消息,内容如下:

**已弃用:**不建议对新代码使用tf.keras.preprocessing.image.ImageDataGenerator。建议使用tf.keras.utils.image_dataset_from_directory加载图像,并使用预处理层转换输出tf.data.Dataset。有关详细信息,请参阅loading imagesaugmenting images的教程,以及preprocessing layer guide

相关问题