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
torch.tensor falscher Datentyp
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/
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/
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
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
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.
- __blackjack__
- User
- Beiträge: 14065
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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`.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
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
- __blackjack__
- User
- Beiträge: 14065
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Eventuell die Kopfdaten in den Daten statt als Kopfdaten‽
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
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 