🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Q&A

解決済

1回答

658閲覧

pytorch.cat したい

mn.py

総合スコア41

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

0グッド

0クリップ

投稿2021/03/10 15:29

pytorchを使い、次元の異なるtensor同志をcatしたいです。

元となるデータは以下の通りの形状です。

python

1a tensor([[[ 0.4548, -0.8869, 0.0518], 2 [-1.4844, -0.6415, 1.9144], 3 [-0.8557, -0.4116, -1.5224]], 4 5 [[ 0.2991, 1.5506, -0.1184], 6 [ 0.7515, -1.7047, 1.5214], 7 [ 0.0742, -1.0651, -1.7436]]]) 8a_sum1 tensor([[-1.8852, -1.9401, 0.4437], 9 [ 1.1248, -1.2192, -0.3406]]) 10a_sum2 tensor([[-0.3803, -0.2116, -2.7897], 11 [ 1.7313, 0.5682, -2.7344]]) 12

やりたいこと

前述したような行列に対して、まず各列・各行方向にsumを行い、その後それぞれの統計量を求め、最後に全ての結果をcatしたいです。

# 試したこと

python

1a_sum1=torch.sum(a,1) 2a_sum2=torch.sum(a,2) 3print('a_sum1',a_sum1) 4print('a_sum2',a_sum2) 5#print('a_sum',a_sum) 6print('============平均====================') 7a_mean1=torch.mean(a_sum1,1) 8a_mean2=torch.mean(a_sum2,1) 9print('a_mean1',a_mean1.shape,a_mean1) 10print('a_mean2',a_mean2.shape,a_mean2) 11print('============分散====================') 12a_sum_var1=torch.var(a_sum1,1) 13a_sum_var2=torch.var(a_sum,1) 14print('a_sum_var1',a_sum_var1.shape,a_sum_var1) 15print('a_sum_var2',a_sum_var2.shape,a_sum_var) 16print('============中央値===================') 17a_sum_medi1 = torch.median(a_sum1,1) 18a_sum_medi2 = torch.median(a_sum2,1) 19#a_sum_medi1 = torch.flatten(a_sum_medi1) 20#a_sum_medi2 = torch.flatten(a_sum_medi2) 21print('a_sum_medi1',a_sum_medi1) 22print('a_sum_medi2',a_sum_medi2) 23print('==============Cat===================') 24a=torch.cat((a_mean1,a_sum_var1,a_sum_var2,a_sum_medi1,a_sum_medi2),1))

python

1実行結果 2a tensor([[[ 0.4548, -0.8869, 0.0518], 3 [-1.4844, -0.6415, 1.9144], 4 [-0.8557, -0.4116, -1.5224]], 5 6 [[ 0.2991, 1.5506, -0.1184], 7 [ 0.7515, -1.7047, 1.5214], 8 [ 0.0742, -1.0651, -1.7436]]]) 9a_sum1 tensor([[-1.8852, -1.9401, 0.4437], 10 [ 1.1248, -1.2192, -0.3406]]) 11a_sum2 tensor([[-0.3803, -0.2116, -2.7897], 12 [ 1.7313, 0.5682, -2.7344]]) 13============平均==================== 14a_mean1 torch.Size([2]) tensor([-1.1272, -0.1450]) 15a_mean2 torch.Size([2]) tensor([-1.1272, -0.1450]) 16============分散==================== 17a_sum_var1 torch.Size([2]) tensor([1.8516, 1.4022]) 18a_sum_var2 torch.Size([2]) tensor([0.0495, 0.9812, 0.4496]) 19============中央値=================== 20a_sum_medi1 torch.return_types.median( 21values=tensor([-1.8852, -0.3406]), 22indices=tensor([0, 2])) 23a_sum_medi2 torch.return_types.median( 24values=tensor([-0.3803, 0.5682]), 25indices=tensor([0, 1])) 26==============Cat=================== 27--------------------------------------------------------------------------- 28TypeError Traceback (most recent call last) 29<ipython-input-226-f050fe622bfe> in <module> 30 25 print('a_sum_medi2',a_sum_medi2) 31 26 print('==============Cat===================') 32---> 27 a=torch.cat((a_mean1,a_sum_var1,a_sum_var2,a_sum_medi1,a_sum_medi2),1) 33 34TypeError: expected Tensor as element 3 in argument 0, but got torch.return_types.median

最後にエラーになってしまいます。苦戦していますので、どなたかアドバイスいただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toast-uz

2021/03/11 10:54

エラー箇所の前については、実行可能なコードを提示いただけますか?a_sumとか未定義の変数が複数混在しており、実行可能になっていません。
guest

回答1

0

ベストアンサー

一部、質問コードの間違いがありますが、修正された前提で回答します。

まず、torch.medianは、中央値そのものと、中央値となったインデックスを、タプルで返します。よって、後の計算を可能にするには、中央値そのものだけを代入する必要があります。

具体的には該当箇所を以下のように修正してください。

Python

1a_sum_medi1, _ = torch.median(a_sum1,1) 2a_sum_medi2, _ = torch.median(a_sum2,1)

さらに、torch.catは「すでに存在する次元で結合する」動作をします。今回は「新たな次元で結合する」必要があるため、torch.stackを使ってください。このあたりの考え方はnumpyも一緒です。

具体的には該当箇所を以下のように修正してください。

Python

1a=torch.stack((a_mean1,a_sum_var1,a_sum_var2,a_sum_medi1,a_sum_medi2))

以上で、質問者様のやりたいことはできると思います。

投稿2021/03/11 11:11

toast-uz

総合スコア3266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mn.py

2021/04/03 02:22

ログインできなくて、遅くなり申し訳ございませんでした。 おかげで無事に解決できました!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問