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?
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.
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)