如何使用 Python 将 Tensorflow 与 tf.data 结合使用,以便更精细地控制?

pythonserver side programmingprogrammingtensorflow

‘tf.Data’ 有助于自定义模型构建管道,方法是对数据集中的数据进行混洗,以便所有类型的数据均匀分布(如果可能)。

阅读更多: 什么是 TensorFlow,以及 Keras 如何与 TensorFlow 配合使用来创建神经网络?

我们将使用 flowers 数据集,其中包含数千朵花的图像。它包含 5 个子目录,每个类都有一个子目录。  

我们使用 Google Colaboratory 来运行以下代码。Google Colab 或 Colaboratory 可帮助在浏览器上运行 Python 代码,并且无需配置,可以免费访问 GPU(图形处理单元)。Colaboratory 是在 Jupyter Notebook 之上构建的。

print("定义自定义输入管道")
list_ds = tf.data.Dataset.list_files(str(data_dir/'*/*'), shuffle=False)
list_ds = list_ds.shuffle(image_count, reshuffle_each_iteration=False)

for f in list_ds.take(5):
   print(f.numpy())

class_names = np.array(sorted([item.name for item in data_dir.glob('*') if item.name != "LICENSE.txt"]))
print(class_names)

print("数据集被分成训练集和验证集")
val_size = int(image_count * 0.2)
train_ds = list_ds.skip(val_size)
val_ds = list_ds.take(val_size)
print("显示每个子集的长度below")
print(tf.data.experimental.cardinality(train_ds).numpy())
print(tf.data.experimental.cardinality(val_ds).numpy())

代码来源:https://www.tensorflow.org/tutorials/load_data/images

输出

定义自定义输入管道
b'/root/.keras/datasets/flower_photos/dandelion/14306875733_61d71c64c0_n.jpg'
b'/root/.keras/datasets/flower_photos/dandelion/8935477500_89f22cca03_n.jpg'
b'/root/.keras/datasets/flower_photos/sunflowers/3001531316_efae24d37d_n.jpg'
b'/root/.keras/datasets/flower_photos/daisy/7133935763_82b17c8e1b_n.jpg'
b'/root/.keras/datasets/flower_photos/tulips/17844723633_da85357fe3.jpg'
['daisy' 'dandelion' 'roses' 'sunflowers' 'tulips']
数据集分为训练集和验证集
每个子集的长度如下所示
2936
734

解释

  • keras.preprocessing 实用程序是一种使用图像目录创建 'tf.data.Dataset' 的方法。
  • 为了更好地控制这一点,可以使用 'tf.data' 编写自定义输入管道。
  • 文件的树结构可用于编译 'class_names' 列表。

相关文章