私はこのガイドに従っています。
tfds.load()
メソッドを使用して、新しい TensorFlow データセットからデータセットをダウンロードする方法を示します。
import tensorflow_datasets as tfds
SPLIT_WEIGHTS = (8, 1, 1)
splits = tfds.Split.TRAIN.subsplit(weighted=SPLIT_WEIGHTS)
(raw_train, raw_validation, raw_test), metadata = tfds.load(
'cats_vs_dogs', split=list(splits),
with_info=True, as_supervised=True)
次の手順は、map メソッドを使用して、データセット内の各項目に関数を適用する方法を示しています。
def format_example(image, label):
image = tf.cast(image, tf.float32)
image = image / 255.0
# Resize the image if required
image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
return image, label
train = raw_train.map(format_example)
validation = raw_validation.map(format_example)
test = raw_test.map(format_example)
次に、使用できる要素にアクセスします。
for features in ds_train.take(1):
image, label = features["image"], features["label"]
また
for example in tfds.as_numpy(train_ds):
numpy_images, numpy_labels = example["image"], example["label"]
ただし、このガイドでは、データ拡張については何も言及していません。Keras の ImageDataGenerator クラスと同様のリアルタイム データ拡張を使用したいと考えています。私は使用してみました:
if np.random.rand() > 0.5:
image = tf.image.flip_left_right(image)
およびその他の同様の拡張機能format_example()
がありますが、リアルタイムの拡張を実行していて、データセット内の元の画像を置き換えていないことを確認するにはどうすればよいですか?
batch_size=-1
に渡してから使用することで、完全なデータセットを Numpy 配列に変換できtfds.load()
ますtfds.as_numpy()
が、それは必要のないメモリ内のすべての画像をロードします。train = train.prefetch(tf.data.experimental.AUTOTUNE)
次のトレーニング ループに十分なデータをロードするために使用できるはずです。