Seite 1 von 1

Verwendung von tf.data.Datasets

Verfasst: Freitag 30. September 2022, 20:51
von nichtSoGuter
Ich habe Daten welche ich in X_train, y_train, X_validation, y_validatino, X_test und y_test gesplittet habe. Dafür habe ich die Funktionen von Sklearn verwendet. Die daten sind als numpy arrays gespeichert.

Nun möchte ich die funktionen von tf.data.Dataset (Link: https://www.tensorflow.org/api_docs/pyt ... ta/Dataset) verwendet. Mit den funktionen batch(), shuffle(), repeat() möchte ich die Daten X_train, y_train, etc. mischen und in batches aufsplitten.

Wenn ich die Funktionen auf die einzelnen Datasets anwende, dann wird durch das mischen X_.. und y_... wahrscheinlich unterschiedlich gemischt. Damit steht einem Sample von X_.. nicht mehr das dazugehörige Target von y_... entgegen glaube ich.

Kann ich das problem mit tf.random.set_seed lösen? Also werden die Daten auf gleicher art und weise gemischt, gebatcht und repeated durch tf.random.set_seed

Code: Alles auswählen

# umwandel von numpy arrays in tf.data
X_train = tf.data.Dataset.from_tensor_slices(X_train)
y_train = tf.data.Dataset.from_tensor_slices(y_train)
# analog: y_test, X_test, etc.

# Anwendung der funktinoen von tf.data.Dataset
tf.random.set_seed(31)
X_train= X_train.repeat(5).shuffle(50).batch(20).prefetch(1)
y_train= y_train.repeat(5).shuffle(50).batch(20).prefetch(1)
# analog: y_test, X_test, etc.
Falls die Daten auf nicht gleicher art und weise gemischt, gebatcht und repeated werden. Dann habe ich mir überlegt die X_... und die jeweiligen y_... Daten miteinandern zusammenzuführen und so dann die funktionen von tf.data.Dataset zu verwenden. Danach würde ich die X_... und y_.. daten dann wieder trennen. Das klingt aber nicht wirklich nach dem besten weg.
Hat jemand vllt eine bessere idee?

Re: Verwendung von tf.data.Datasets

Verfasst: Freitag 30. September 2022, 21:14
von nichtSoGuter
Durch tf.random.set_seed() wird nicht gleich gemischt. Das habe ich mit dem folgenden Code rausfinden können.

Code: Alles auswählen

a = np.arange(10)
b = np.arange(10)
a = tf.data.Dataset.from_tensor_slices(a)
b = tf.data.Dataset.from_tensor_slices(b)

a = a.repeat(5).shuffle(50).batch(20).prefetch(1)
b = b.repeat(5).shuffle(50).batch(20).prefetch(1)

for item in a:
  print(item)

for item in b:
  print(item)
Der output von "a" und "b" sind verschieden.

Hat jemand einen Idee wie ich die beiden gleich gemischt werden?
Vielen Dank im Voraus!

Re: Verwendung von tf.data.Datasets

Verfasst: Sonntag 2. Oktober 2022, 19:24
von ThomasL
Du bist schon nah dran. Dein Fehler ist, dass du Features und Labels trennst.
Schau dir mal unter : https://www.tensorflow.org/api_docs/pyt ... sor_slices
das fünfte Beispiel an "# Two tensors can be combined into one Dataset object."
wie du die beiden wieder zusammen führen kannst.

Dort steht auch ein Link https://www.tensorflow.org/guide/data#c ... mpy_arrays der am Beispiel des Fashion MNIST die Verwendung erklärt.