У меня 1500 файлов RGB (.jpg) и 1500 значений карт объектов (.npy). Я хочу использовать их в качестве набора данных для моего проекта глубокого обучения. Я использую tenorflow 1.12.
Я записал их в файл .tfrecords, используя tf.Example. Вот код, который я использовал для импорта этого файла с помощью tf.data (благодаря комментарию Удея).
import tensorflow as tf
import numpy as np
import pdb
IMAGE_HEIGHT = 228
IMAGE_WIDTH = 304
def tfdata_generator(tfrname, is_training, batch_size):
'''Construct a data generator using tf.Dataset'''
## You can write your own parse function
def parse_function(example):
features = tf.parse_single_example(example, features={
'image_raw': tf.FixedLenFeature([], tf.string, default_value=""),
'hint_raw': tf.FixedLenFeature([], tf.string, default_value="")
})
image = features['image_raw']
hint = features['hint_raw']
image = tf.decode_raw(image, tf.uint8)
image = tf.cast(image, tf.float32)
image = tf.reshape(image, [IMAGE_HEIGHT, IMAGE_WIDTH, 3])
hint = tf.decode_raw(hint, tf.uint8)
hint = tf.cast(hint, tf.float32)
hint = tf.reshape(hint, [8, 10, 1024])
return image, hint
dataset = tf.data.TFRecordDataset(tfrname)
#pdb.set_trace()
if is_training:
dataset = dataset.shuffle(100) # depends on sample size
#pdb.set_trace()
# Transform and batch data at the same time
dataset = dataset.apply(tf.data.experimental.map_and_batch(parse_function,
8, num_parallel_batches=4)) # cpu cores
dataset = dataset.repeat(-1)
dataset = dataset.prefetch(2)
return dataset
Я установил batch_size равным 8. Но когда я выполнил отладку, форма набора данных была
((?, 228, 304, 3), (?, 8, 10, 1024)), types: (tf.float32, tf.float32)
Это правильно? Этот код неправильный? Или есть ошибки, когда я делаю записи?