У меня есть огромное количество изображений с файлом меток (.mat) (я не могу использовать tf.data.Dataset.from_tensor_slices()
), и я хочу использовать tf.data
API для создания набора данных с тензорным потоком.
КакЯ прочитал в документации, я могу использовать tf.data.TextLineDataset
для большого количества данных (мне нужно иметь текстовый файл с адресом всех изображений и отправить путь текстового файла в качестве аргумента tf.data.TextLineDataset
).Затем я могу использовать метод map
, чтобы прочитать текстовый файл (tf.read_file
), декодировать изображение JPG (tf.image.decode_jpeg
) и выполнить некоторые базовые преобразования изображения.
Однако я не могу использовать scipy.io.loadmat
влюбая часть метода map
, потому что у меня нет строки, указывающей путь к файлу мата.Все, что у меня есть, это tf.Tensor
.
Я не думаю, что чтение всех изображений и создание из них TFRecord настолько эффективно в этом случае, потому что тогда я в основном делаю каждую вещь два раза.Однажды, прочитав все изображения и сделав TFRecord, и еще раз, прочитав TFRecord, чтобы создать набор данных tenorflow.
Есть идеи, как мне решить эту проблему?
Это мой код:
dataset = tf.data.TextLineDataset(txt_file).map(read_img_and_mat)
, а затем:
def read_img_and_mat(path):
image_string = tf.read_file(path)
image_decoded = tf.image.decode_jpeg(image_string, channels=3)
label = ... # get label from mat file
return image_decoded, label