Seite 1 von 1

Verstehe code nicht

Verfasst: Mittwoch 27. Juli 2022, 19:52
von nichtSoGuter
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]


Re: Verstehe code nicht

Verfasst: Mittwoch 27. Juli 2022, 20:08
von Sirius3
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?