web-dev-qa-db-fra.com

Impossible de convertir une liste en tableau: ValueError: un seul élément tenseurs peut être converti en scalaires Python.

Je travaille actuellement avec le framework PyTorch et j'essaie de comprendre le code étranger. J'ai eu un problème avec les indices et je voulais imprimer la forme d'une liste.
La seule façon de le faire (pour autant que Google me le dise) consiste à convertir la liste en tableau numpy, puis à obtenir la forme avec numpy.ndarray.shape ().

Mais en essayant de convertir ma liste en tableau, j’ai eu un ValueError: only one element tensors can be converted to Python scalars.

Ma liste est un tenseur de PyTorch converti (list(pytorchTensor)) et ressemble un peu à ceci:

[tenseur ([[- 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]]), tenseur ([[- - 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]]), tenseur ([[- - 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]]]]

Existe-t-il un moyen d’obtenir la forme de cette liste sans la convertir en tableau numpy?

1
Henning

Il semble que vous ayez une liste de tenseurs. Pour chaque tenseur, vous pouvez voir sa size() (inutile de convertir en list/numpy). Si vous insistez, vous pouvez convertir un tableau tenseur en tableau numpy à l’aide de numpy() :

Retourne une liste de formes de tenseurs:

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

Retourne une liste de tableaux numpy:

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

En termes de performances, il est toujours préférable d’éviter de transformer des tenseurs en tableaux numpy, car cela pourrait entraîner une synchronisation de la mémoire périphérique/hôte. Si vous devez uniquement vérifier la shape d'un tenseur, utilisez la fonction size().

3
Shai

Le moyen le plus simple de convertir le tenseur de pytorch en tableau numpy est le suivant:

nparray = tensor.numpy()

Aussi, pour la taille et la forme:

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