我正在使用tf.keras.utils.image_dataset_from_directory加載 4575 張影像的資料集。雖然此函式允許將資料拆分為兩個子集(使用validation_split引數),但我想將其拆分為訓練、測驗和驗證子集。
我嘗試使用dataset.skip()并dataset.take()進一步拆分結果子集之一,但這些函式分別回傳 aSkipDataset和 a TakeDataset(順便說一句,與
但是當使用 a 時SkipDataset,它們不是:


uj5u.com熱心網友回復:
問題是,當您執行test_val_ds.take(686)和時,您并沒有采集和跳過樣本test_val_ds.skip(686),而是實際批次。嘗試運行print(val_dataset.cardinality()),您將看到您真正為驗證保留了多少批次。我猜val_dataset是空的,因為您沒有 686 批進行驗證。這是一個作業示例:
import tensorflow as tf
import pathlib
dataset_url = "https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"
data_dir = tf.keras.utils.get_file('flower_photos', origin=dataset_url, untar=True)
data_dir = pathlib.Path(data_dir)
batch_size = 32
train_ds = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
seed=123,
image_size=(180, 180),
batch_size=batch_size)
val_ds = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="validation",
seed=123,
image_size=(180, 180),
batch_size=batch_size)
test_dataset = val_ds.take(5)
val_ds = val_ds.skip(5)
print('Batches for testing -->', test_dataset.cardinality())
print('Batches for validating -->', val_ds.cardinality())
model = tf.keras.Sequential([
tf.keras.layers.Rescaling(1./255, input_shape=(180, 180, 3)),
tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(5)
])
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
epochs=1
history = model.fit(
train_ds,
validation_data=val_ds,
epochs=1
)
Found 3670 files belonging to 5 classes.
Using 2936 files for training.
Found 3670 files belonging to 5 classes.
Using 734 files for validation.
Batches for testing --> tf.Tensor(5, shape=(), dtype=int64)
Batches for validating --> tf.Tensor(18, shape=(), dtype=int64)
92/92 [==============================] - 96s 1s/step - loss: 1.3516 - accuracy: 0.4489 - val_loss: 1.1332 - val_accuracy: 0.5645
在本例中,abatch_size為 32,您可以清楚地看到驗證集保留了 23 個批次。之后,將 5 個批次分配給測驗集,剩下 18 個批次用于驗證集。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/426835.html
標籤:Python 张量流 喀拉斯 张量流数据集 tf.keras
下一篇:張量維度必須相等
