0

以下の例は、データ パイプラインに関する公式の TensorFlow チュートリアルから抜粋したものです。基本的に、大量の JPG のサイズを変更して(128, 128, 3). 何らかの理由で、操作を適用すると、データセットの形状を調べるmap()と、色次元、つまり 3 が に変わります。Noneその三次元が選ばれるのはなぜですか?(そうではないが、何も見つけられなかった画像があるかどうかを確認しました(128, 128, 3)。)

どちらかといえば、None最初の次元、つまり例の数をカウントする次元にのみ表示されるべきであり、例の個々の次元に影響を与えるべきではありません。 sとして格納されるように、とにかく同じ形状tf.data.Dataset

TensorFlow 2.1 のコードは

import pathlib
import tensorflow as tf

# Download the files.
flowers_root = tf.keras.utils.get_file(
    'flower_photos',
    'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
    untar=True)
flowers_root = pathlib.Path(flowers_root)

# Compile the list of files.
list_ds = tf.data.Dataset.list_files(str(flowers_root/'*/*'))

# Reshape the images.
# Reads an image from a file, decodes it into a dense tensor, and resizes it
# to a fixed shape.
def parse_image(filename):
  parts = tf.strings.split(file_path, '\\') # Use the forward slash on Linux
  label = parts[-2]

  image = tf.io.read_file(filename)
  image = tf.image.decode_jpeg(image)
  image = tf.image.convert_image_dtype(image, tf.float32)
  image = tf.image.resize(image, [128, 128])
  print("Image shape:", image.shape)
  return image, label

print("Map the parse_image() on the first image only:")
file_path = next(iter(list_ds))
image, label = parse_image(file_path)

print("Map the parse_image() on the whole dataset:")
images_ds = list_ds.map(parse_image)

利回り

Map the parse_image() on the first image only:
Image shape: (128, 128, 3)
Map the parse_image() on the whole dataset:
Image shape: (128, 128, None)

なぜNoneその最後の行に?

4

1 に答える 1