/ / Mieszaj gęste i rzadkie tensory w tf.data.Dataset api - tensorflow, tensorflow-zestawy danych

Mieszaj gęste i rzadkie tensory wewnątrz tf.data.Dataset api - tensorflow, tensorflow-datasets

Wyobraź sobie, że chcę trenować model, któryminimalizuje odległość między obrazem a zapytaniem. Z jednej strony mam funkcje obrazu z CNN, z drugiej strony mam odwzorowania od słowa do osadzonego wektora (na przykład w2v):

def raw_data_generator():
for row in network_data:
yield (row["cnn"], row["w2v_indices"])

dataset = tf.data.Dataset.from_generator(raw_data_generator, (tf.float32, tf.int32))
dataset = dataset.prefetch(1000)

tutaj chcę utworzyć partię, ale chcę utworzyć gęstą partię dla funkcji cnn i rzadką partię dla w2v, ponieważ oczywiście ma zmienną długość (i chcę użyć safe_embeddings_lookup_sparse). Jest partia funkcja dla gęstych, i .apply (tf.contrib.data.dense_to_sparse_batch (..)) funkcja rzadka, ale jak korzystać z nich jednocześnie?

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz spróbować utworzyć dwa zestawy danych (po jednym dla każdej funkcji), zastosować odpowiednie grupowanie dla każdego z nich, a następnie skompresować je razem z tf.data.Dataset.zip.

@staticmethod
zip(datasets)

Tworzy zestaw danych poprzez spakowanie podanych zestawów danych.

Ta metoda ma podobną semantykę jak wbudowanaFunkcja zip () w Python, z tą różnicą, że argument zestawu danych może być dowolną zagnieżdżoną strukturą obiektów zestawu danych. Na przykład:

# NOTE: The following examples use `{ ... }` to represent the
# contents of a dataset.
a = { 1, 2, 3 }
b = { 4, 5, 6 }
c = { (7, 8), (9, 10), (11, 12) }
d = { 13, 14 }

# The nested structure of the `datasets` argument determines the
# structure of elements in the resulting dataset.
Dataset.zip((a, b)) == { (1, 4), (2, 5), (3, 6) }
Dataset.zip((b, a)) == { (4, 1), (5, 2), (6, 3) }

# The `datasets` argument may contain an arbitrary number of
# datasets.
Dataset.zip((a, b, c)) == { (1, 4, (7, 8)),
(2, 5, (9, 10)),
(3, 6, (11, 12)) }

# The number of elements in the resulting dataset is the same as
# the size of the smallest dataset in `datasets`.
Dataset.zip((a, d)) == { (1, 13), (2, 14) }