webentwicklung-frage-antwort-db.com.de

Liste kann nicht in Array konvertiert werden: ValueError: Nur ein Elementstensor kann in Python-Skalare konvertiert werden

Ich arbeite derzeit mit dem PyTorch-Framework und versuche, fremden Code zu verstehen. Ich bekam eine Index-Ausgabe und wollte die Form einer Liste ausdrucken.
Die einzige Möglichkeit (soweit Google es mir sagt) ist, die Liste in ein numpy-Array zu konvertieren und dann die Form mit numpy.ndarray.shape () zu erhalten. 

Beim Versuch, meine Liste in ein Array umzuwandeln, bekam ich einen ValueError: only one element tensors can be converted to Python scalars

Meine Liste ist ein konvertierter PyTorch-Tensor (list(pytorchTensor)) und sieht ungefähr so ​​aus: 

[Tensor ([[- 0,2781, -0,2567, -0,2353, ..., -0,9640, -0,9855, -1,0069])
[-0,2781, -0,2567, -0,2353, ..., -1,0069, -1,0283, -1,0927],
[-0,2567, -0,2567, -0,2138, ..., -1,0712, -1,1141, -1,1784],
...,
[-0,6640, -0,6425, -0,6211, ..., -1,0712, -1,1141, -1,0927],
[-0,6640, -0,6425, -0,5997, ..., -0,9426, -0,9640, -0,9640],
[-0,6640, -0,6425, -0,5997, ..., -0,9640, -0,9426, -0,9426]]]]], Tensor ([[0,0769, -0,0980, -0,076 9, ..., -] 0,9388, -0,9598, -0,9808],
[-0,0559, -0,0769, -0,0980, ..., -0,9598, -1,0018, -1,0228],
[-0,0559, -0,0769, -0,0769, ..., -1,0228, -1,0439, -1,0859],
...,
[-0,4973, -0,4973, -0,4973, ..., -1,0018, -1,0439, -1,0228],
[-0,4973, -0,4973, -0,4973, ..., -0,8757, -0,9177, -0,9177],
[-0,4973, -0,4973, -0,4973, ..., -0,9177, -0,8967, -0,8967]]]], Tensor ([[- 0,1313, -0,1313, -0,110 0, ..., -] 0,8115, -0,8328, -0,8753],
[-0,1313, -0,1525, -0,1313, ..., -0,8541, -0,8966, -0,9391],
[-0,1100, -0,1313, -0,1100, ..., -0,9391, -0,9816, -1,0666],
...,
[-0.4502, -0.4714, -0.4502, ..., -0.8966, -0.8966, -0.8966],
[-0,4502, -0,4714, -0,4502, ..., -0,8115, -0,8115, -0,7903],
[-0.4502, -0.4714, -0.4502, ..., -0.8115, -0,7690, -0,7690]]) 

Gibt es eine Möglichkeit, die Form dieser Liste abzurufen, ohne sie in ein numpy-Array zu konvertieren?

1
Henning

Es scheint, als hätten Sie eine Liste von Tensoren. Für jeden Tensor können Sie seine size() sehen (keine Konvertierung in list/numpy). Wenn Sie darauf bestehen, können Sie einen Tensor in ein numpy-Array mit numpy() konvertieren:

Gibt eine Liste der Tensorformen zurück:

>> [t.size() for t in my_list_of_tensors]

Gibt eine Liste von numpy-Arrays zurück:

>> [t.numpy() for t in my_list_of_tensors]

In Bezug auf die Leistung ist es immer am besten zu vermeiden, dass Tensoren in numpy-Arrays geworfen werden, da dies zu einer Synchronisierung des Geräte-/Host-Speichers führen kann. Wenn Sie lediglich die shape eines Tensors überprüfen müssen, verwenden Sie die size()-Funktion.

3
Shai

Der einfachste Weg, einen Pytorch-Tensor in ein Numpy-Array zu konvertieren, ist:

nparray = tensor.numpy()

Auch für Größe und Form:

tensor_size = tensor.size()
tensor_shape = tensor.shape()
tensor_size
>>> (1080)
tensor_shape
>>> (32, 3, 128, 128)
0
Koke Cacao