Seite 1 von 1
torch.tensor falscher Datentyp
Verfasst: Freitag 30. Dezember 2022, 13:50
von Hakoda
Hallo,
ich bin noch relativ neu im programmieren und bräuchte Hilfe.
Ich erzeuge mit diesem Code mein train_labels:
train_inputs, validation_inputs, train_labels, validation_labels = train_test_split(input_ids, labels,
random_state=2018, test_size=0.1)
Wenn ich nun train_labels = torch.tensor(train_labels) machen will kommt folgende Fehlermeldung:
can't convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint8, and bool.
Ich verstehe, dass train_labels vom falschen Typ ist, allerdings nicht wie ich es ändere, damit es passt. Durch train_labels.dtype wird auch dtype('O') ausgegeben.
Würde mich über jede Hilfe freuen. Vielen Dank
Re: torch.tensor falscher Datentyp
Verfasst: Samstag 31. Dezember 2022, 13:32
von ThomasL
Nun, wie sehen denn deine Labels aus?
Du musst die halt in einen der "supported types: float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint8, and bool." umwandeln.
Eventuell hilft das hier, ohne Gewähr, habe nicht viel mit Pytorch gemacht.
https://sparrow.dev/pytorch-one-hot-encoding/
Re: torch.tensor falscher Datentyp
Verfasst: Samstag 31. Dezember 2022, 15:13
von Hakoda
Ich habe eine .csv Trainingsdatei mit mehreren tausenden Einträgen, welche ich gestellt bekommen habe. Am Ende eines Satzes steht immer ein Komma und eine Zahl zwischen 0 und 2 (also die Label). Mithilfe von df = pd.read_csv("train.csv", delimiter= ' , ' , header=None, names=['sentence_source', 'sentence', 'label']) teile ich den Satz auf. Anhand der Output Tabelle, welche man durch die Eingabe df bekommt, sehe ich, dass die Label auch richtig erkannt/eingeordnet werden. Nur werden diese Label anscheinden nicht als Zahlen erkannt, wodurch ist meine Label vom falschen Typ sind. Nun weiß ich aber nicht, wie ich diese in einen zulässigen umwandel, wie z.B. int64.
Re: torch.tensor falscher Datentyp
Verfasst: Samstag 31. Dezember 2022, 17:24
von __blackjack__
@Hakoda: Ich würde ja mal schauen was in dieser Spalte *wirklich* drin steht, denn nur Zahlen zwischen 0 und 2 sind es ja anscheinend nicht, denn sonst wäre die Spalte nicht vom Typ `object`.
Re: torch.tensor falscher Datentyp
Verfasst: Sonntag 15. Januar 2023, 14:52
von Hakoda
Ich bin nun in der Lage mithilfe von: df['label']=df['label'].apply(lambda x: 1 if x=='1' else 0) df['label'] in int64 umzuwandeln. Hier habe ich nun ein weiteres Problem. Die 1er werden in eine 1 und die 0 in eine 0 umgewandelt (so wie es auch sein soll), allerdings habe ich ja eine weitere Zahl, die 2. Hier werden nun die 2er auch in eine 0 umgewandelt. Hat jemand eine Idee, wie ich den Teil in der .apply Klammer umschreiben kann, sodass die 2 auch berücksichtigt wird. Habe zuerst an ein else if gedacht, macht aber aufgrund des lambda x:1 keinen Sinn, da die 2er sonst in eine 1 umgewandelt wird... Jemand eine Idee? Danke
Re: torch.tensor falscher Datentyp
Verfasst: Sonntag 15. Januar 2023, 15:11
von __deets__
Wieso nicht einfach apply(int)?
Re: torch.tensor falscher Datentyp
Verfasst: Sonntag 15. Januar 2023, 16:22
von Hakoda
Bekomme bei apply(int) die Fehlermeldung: invalid literal for int() with base 10: 'label'
Re: torch.tensor falscher Datentyp
Verfasst: Sonntag 15. Januar 2023, 16:34
von __deets__
Dann hast du noch Quatsch in deinen Daten. Wieso steht da label drin, wenn es nur 0, 1 oder 2 laut deiner Beschreibung sein sollen?
Re: torch.tensor falscher Datentyp
Verfasst: Sonntag 15. Januar 2023, 16:56
von __blackjack__
Eventuell die Kopfdaten in den Daten statt als Kopfdaten‽
Re: torch.tensor falscher Datentyp
Verfasst: Sonntag 15. Januar 2023, 18:43
von Hakoda
Es war tatsächlich die Kopfzeile, habe die extra mehrmals überprüft gehabt, es stand auch extra eine 0 in der Spalte. Nachdem ich nun trotzdem mit df.drop die erste Zeile gelöscht habe, kann ich .apply(int) benutzen. Oh man wegen so einem banalen Fehler, so viele Stunden verschwendet. Naja aus Fehlern lernt man. Vielen Dank, falls irgendwann nochmals eine Frage aufkommt, weiß ich, dass ich hier gut aufgehoben bin

Re: torch.tensor falscher Datentyp
Verfasst: Sonntag 15. Januar 2023, 18:49
von Sirius3
@Hakoda: NEIN! Man liest nicht die Datei inklusivde Kopfzeile, um dann nachträglich die Kopfzeile wegzuwerfen, sondern liest die Datei gleich richtig ein, also nicht mit header=None und den names explizit angegeben.