#python #tensorflow #tensorflow2.0 #tensorflow-datasets #tf.data.dataset
#python #тензорный поток #tensorflow2.0 #tensorflow-datasets #tf.data.dataset
Вопрос:
У меня есть генератор данных python-
import numpy as np
import tensorflow as tf
vocab_size = 5
def create_generator():
'generates sequences of varying lengths(5 to 7) with random number from 0 to voca_size-1'
count = 0
while count < 5:
sequence_len = np.random.randint(5, 8) # length varies from 5 to 7
seq = np.random.randint(0, vocab_size, (sequence_len))
yield seq
count =1
gen = tf.data.Dataset.from_generator(create_generator,
args=[],
output_types=tf.int32,
output_shapes = (None, ), )
for g in gen:
print(g)
Он генерирует последовательности различной длины (от 5 до 8) с целочисленными значениями от 0 до 4.
Вот некоторые из последовательностей, сгенерированных генератором-
tf.Tensor([4 0 0 1 4 1], shape=(7,), dtype=int32) # 1st sequence
tf.Tensor([3 4 4 4 0], shape=(5,), dtype=int32) # 2nd sequence
tf.Tensor([4 4 2 1 4 3], shape=(5,), dtype=int32) # 3rd sequence
tf.Tensor([1 0 2 4 0], shape=(7,), dtype=int32) # 4th sequence
tf.Tensor([1 4 0 2 2], shape=(6,), dtype=int32) # 5th sequence
Теперь я хочу изменить последовательности таким образом, чтобы-
- все четные числа удаляются из каждой последовательности
- последовательности (после удаления всех четных чисел) с длиной <2 отфильтровываются
Это должно дать нам результат, который выглядит следующим образом-
[1 1] # 1st sequence
[1 3] # 3rd sequence
Как я могу выполнить такие преобразования, используя tf.data.Методы набора данных?
Ответ №1:
Ваш for
цикл должен выглядеть так:
new_gen = []
for g in gen:
arr = np.array(g) % 2 != 0:
if len(list(arr)) >= 2:
new_gen.append(arr)
print(new_gen)
Комментарии:
1. Я хочу использовать tf.data. Методы набора данных для этого, чтобы я мог оптимизировать конвейер ввода при обучении модели на машине multi_GPU с использованием параллелизма данных. Мой конвейер ввода данных является узким местом, которое я пытаюсь оптимизировать. Вот почему я хочу, чтобы это было сделано с помощью tf.data. Методы набора данных, поскольку они поддерживают параллелизм данных.