tf.data.Dataset.zip (a, b) изменяет порядок элементов, если перетасовано - PullRequest
1 голос
/ 18 февраля 2020

Я готовлю набор данных, а затем обучаю модель перед сохранением выходных данных (с целью извлечения знаний)

Чтобы сохранить их в формате tfrecords, мне нужно использовать функцию .zip () .

Я воспроизвел ошибку / ошибку с помощью следующего кода. Мои настоящие учебные файлы состоят из сотен строк, поэтому я их сюда не включил.

Я использую tenorflow 2.1. и python 3.7 в Ubuntu 18.04

Проблема, которую я не могу решить:

Данные перемешаны (что нормально). Но после архивирования кортежи имеют различный порядок друг к другу (что не в порядке).

import tensorflow as tf 
ds = tf.data.Dataset.from_tensor_slices([1,2,3,4, 5])

#prepare dataset for training
batch_size=2
ds = ds.cache().repeat().shuffle(buffer_size=5, reshuffle_each_iteration=True).batch(batch_size)

#create model. here: map identity function
model = tf.keras.models.Sequential([tf.keras.layers.Lambda(lambda x: x , input_shape=(1,))])

#train with model.fit()

#make predictions. 
pred = model.predict(ds, steps=5//batch_size)

#prepare for saving to tfrecords
ds = ds.unbatch()
ds = ds.take(5)
pred = tf.data.Dataset.from_tensor_slices(pred)
combined = tf.data.Dataset.zip((ds, pred))

#show unwanted behaviour
for (a),c in combined:
    print(a,c)

Вывод фрагмента кода показывает, что элементы в строке не совпадают. (например, строка 1: 3 должна быть сопоставлена ​​с 3)

tf.Tensor(3, shape=(), dtype=int32) tf.Tensor([4.], shape=(1,), dtype=float32)
tf.Tensor(1, shape=(), dtype=int32) tf.Tensor([1.], shape=(1,), dtype=float32)
tf.Tensor(4, shape=(), dtype=int32) tf.Tensor([1.], shape=(1,), dtype=float32)
tf.Tensor(3, shape=(), dtype=int32) tf.Tensor([2.], shape=(1,), dtype=float32)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...