Я использую API набора данных и получаю неожиданные значения None в форме набора данных.
import tensorflow as tf
import os
def load_seti_dataset(path):
with open(path) as f:
dataset_file = f.read().splitlines()
data = tf.data.Dataset.from_tensor_slices(dataset_file)
data = data.repeat()
data = data.shuffle(buffer_size=1000)
data = data.map(parse_records, num_parallel_calls=4)
data = data.batch(batch_size=2)
data = data.prefetch(buffer_size=1)
return data
def load_image(path):
image = tf.io.read_file(path)
image = tf.io.decode_png(image, channels=3)
image = tf.image.resize(image, [512, 384])
image = 1. - image / 127.5
return image
def parse_records(line):
image_path, image_label = tf.io.decode_csv(line, ["", 0])
image = load_image(image_path)
return image, image_label
data = load_seti_dataset("test_data.csv")
print(data)
test_data.csv
- это просто CSV с путем к изображению и меткой. Изображения, которые я читаю, имеют размер 512х384 с 3 каналами. Каждая метка представляет собой просто скалярное значение.
При печати data
выводятся следующие размеры:
<PrefetchDataset shapes: ((None, 512, 384, 3), (None,)), types: (tf.float32, tf.int32)>
Что бы я ожидал:
<PrefetchDataset shapes: ((512, 384, 3), (1,)), types: (tf.float32, tf.int32)>
Почему в каждом измерении в пакете отсутствуют значения None? Почему второе значение в пакете не просто скаляр?