Создайте генератор данных с tf.data.dataset для моделей последовательности

У меня есть набор данных изображений, включая изображения RGB: img1.png, img2.png ... img250.png. Я извлек 100 маленьких патчей размером [64,64,3] из каждого изображения. Итак, у меня есть набор данных вроде img1_1.png, img1_2.png ... img1_100.png, img2_1.png, img2_2.png, ... img2_100.png, img3_1, .....

Я хочу создать генератор данных с tf.data.dataset.from_tensor_slices для передачи всех патчей каждого изображения в модель RNN. Итак, я хочу, чтобы генератор создавал такие выходные данные: [batch_size, 100, 64, 64, 3]

Как я могу это сделать?


comment
Вы имеете в виду в формате (размер_пакета, 64, 64, 3)? Если нет, то что указывает размер batch_size?   -  person Aniket Bote    schedule 30.08.2020
comment
Нет, мне нужен формат (размер_пакета, последовательность_лен, 64, 64, 3). Batch_size - это количество пакетов, которые проходят через модель последовательности (например, batch_size = 20). sequence_len - это также количество патчей последовательности, которые проходят через модель RNN на каждой итерации, sequence_len в моей модели - 100.   -  person Ramin Nateghi    schedule 30.08.2020


Ответы (1)


Код:

# generating data
x = tf.constant(np.random.randint(256, size =(250,64, 64, 3)), dtype = tf.int32)

# Creating a dataset with sequence length
dataset = tf.data.Dataset.from_tensor_slices(x).batch(100, drop_remainder= True)
for i in dataset:
    print(i.shape)

Выход:

(100, 64, 64, 3)
(100, 64, 64, 3)

Убедитесь, что drop_remainders = True

Наконец, создайте размер партии желаемой длины.

# creating dataset with batch_size
dataset = dataset.batch(32)
for i in dataset:
    print(i.shape)

Выход:

(2, 100, 64, 64, 3)

Если ваш размер данных (250,100,64, 64, 3):

dataset = tf.data.Dataset.from_tensor_slices(x).batch(32)
for i in dataset:
    print(i.shape)

Выход:

(32, 100, 64, 64, 3)
(32, 100, 64, 64, 3)
(32, 100, 64, 64, 3)
(32, 100, 64, 64, 3)
(32, 100, 64, 64, 3)
(32, 100, 64, 64, 3)
(32, 100, 64, 64, 3)
(26, 100, 64, 64, 3)
person Aniket Bote    schedule 30.08.2020