Verwendung von tf.data.Datasets

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nichtSoGuter
User
Beiträge: 92
Registriert: Mittwoch 13. April 2022, 17:40

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?
nichtSoGuter
User
Beiträge: 92
Registriert: Mittwoch 13. April 2022, 17:40

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!
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten