1. ホーム
  2. python

[解決済み] リストを配列に変換できない。ValueError: Pythonのスカラーに変換できるのは1要素のテンソルだけです。

2022-01-25 02:43:29

質問

現在、PyTorchフレームワークを使用して、外国のコードを理解しようとしています。私はインデックスの問題に直面し、リストの形状を表示したいと思いました。
Googleが教えてくれる限りでは、リストをnumpyの配列に変換して、numpy.ndarray.shape()で形状を取得する方法しかないそうです。

しかし、リストを配列に変換しようとすると ValueError: only one element tensors can be converted to Python scalars .

私のリストは、変換された PyTorch Tensor ( list(pytorchTensor) のようなものである。

[テンソル([[-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.9426], [-0.9426], -0.5997, ...,-0.0.1]・・・・。
[-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.1314, -0.110 0, ...,-0.8115, -0.8327], -0.8327]), -0.4973, -0.144, -1.0, -1.0, -1.0
[-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]])]

そのリストの形状をnumpyの配列に変換せずに取得する方法はないでしょうか?

どのように解決するのですか?

テンソルのリストがあるようですね。それぞれのテンソルに対して、その size() (list/numpyに変換する必要はない)。どうしてもというなら、テンソルをnumpyの配列に変換するために numpy() :

テンソル形状のリストを返す。

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

numpy配列のリストを返します。

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

性能の面では、テンソルのnumpy配列へのキャストは、デバイス/ホストメモリの同期が発生する可能性があるため、常に避けるのが最善です。もし shape を使用することで、テンソルの size() 関数を使用します。