Verstehe code nicht

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 verstehe den Code aus einem Buch leider nicht genau. Vielleicht kann mir jemand damit helfen.
Zunächst wird eine Attribut einer Klasse in der __init__() Methode der Klasse angelegt.
Dabei wird self.test_data mit einer Leeren liste und self.dataset mit None gleichgesetzt. Wieso wird nicht beides mit None initialisiert? Kann es dafür einen bestimmten Grund geben? Beide Variablen werden im weitern Verlauf des Codes überschrieben, also ist es doch egal wie man die Instanzvariablen initialisiert oder?

Außerdem wird im weiteren Verlauf des Codes ein Objekt wie eine liste behandelt. Das das nicht geht ist mir klar. Wieso das im code gemacht wird ist mir unklar bzw. kann das überhaupt funktionieren?

Code: Alles auswählen

class Klassenname(Parentklasse):
 	def __init__():
 		# wieso wird self.test_data mit einer leere Liste und für self.dataset mit None gleichgesetzt 
		self.test_data = []
		self.dataset = None

	# an einer anderen stelle des codes weiter untern werden die attribute festgelegt
	self.dataset = tfds.loads = tfds.load('mnist', split='train', shuffle_files=True)
	self.test_data = self.dataset["train"].shuffle(10).batch(10).prefetch(1)

	# an einer anderen stelle versucht man auf mit element_spec auf das shape von test_dataset zuzugreifen. Folgendermaßen:
	shape = self.test_data.element_spec[0].shape
	
	# FRAGE: element_spec returnt keine liste sondern ein  --> tf.TypeSpec object. Wie kann man mit self.test_data.element_spec[0] auf ein Element zugegriffen werden?
Wenn ich das ganze mit meinem eigenen Code (siehe unten) versuche nachzumachen, dann erhalte ich folgende Fehlermeldung: TypeError: 'TensorSpec' object is not subscriptable

Code: Alles auswählen

data = []

liste = [[[1,2,3],[2,2,2],[21,1,1]]]
df = tf.data.Dataset.from_tensor_slices(liste)

data = df.shuffle(3).batch(2)
data.element_spec[0]

Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Frage ist, warum nicht gleich die Instanz der Klasse richtig initialisiert wird.
Das kann man aus den Fragmenten, die Du hier zeigst, nicht beantworten.
Auch bei der zweiten Frage fehlt Kontext. Wie ist der genaue Fehlermeldung inklusive Traceback?
Antworten