[英]saving the shuffled images in a batch to disk with original filename
我在一個目錄中有一個數據集,我希望將其分成訓練集和驗證集,然后將每個集的所有圖像保存到不同的目錄
我試圖通過使用 tf.keras.preprocessing.image_dataset_from_directory() 和 tf.keras.preprocessing.image.save_img() 函數和 tf.data.Dataset.file_paths 屬性來做到這一點
代碼看起來像這樣:
train_dataset = image_dataset_from_directory(PATH_DS,
shuffle=True,
labels='inferred',
label_mode='categorical',
class_names=class_names,
batch_size=1,
image_size=[1080, 1920],
validation_split=0.15,
subset="training",
seed=456)
validation_dataset = image_dataset_from_directory(PATH_DS,
shuffle=True,
labels='inferred',
label_mode='categorical',
class_names=class_names,
batch_size=1,
image_size=[1080, 1920],
validation_split=0.15,
subset="validation",
seed=456)
filepaths_val = validation_dataset.file_paths
filepaths_train = train_dataset.file_paths
for idx, (batch, filepath) in enumerate(zip(train_dataset.as_numpy_iterator(), train_dataset.file_paths)):
images, labels = batch
tf.keras.preprocessing.image.save_img(os.path.join(PATH_WD, f"test/train/{class_names[np.argmax(labels[0])]}/{os.path.basename(filepath)}"), images[0], "channels_last", "png")
我需要對圖像進行洗牌,因為它們的文件名使得字母數字排序會導致集合之間的數據泄漏
我遇到的問題似乎是數據集迭代器具有隨機初始化。 文件路徑 object 只是一個我可以切片的列表,我已經驗證每個種子總是返回相同的文件路徑。
但是,調用數據集總是返回不同的元素。 我已經嘗試過Dataset.unbatch() 方法、as_numpy_iterator() 等方法。每次我第一次調用迭代器時,它都會返回一個不同的元素。
通過使用更簡單和更快的方法解決了這個問題
因為我已經在數據集的每個拆分中都有圖像列表,所以我可以簡單地使用 shutil 來復制或移動項目。
這種方法使我想用圖像做的其他一些事情變得更加困難,但可以解決
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.