モチベーション
備忘録です。
for文を使って処理した値を空のリストに入れるというような操作をpytorchでやりたかったのですが、pytorchで空の配列を作ろうとすると処理後のtensorの次元にあったものを作って代入する必要があるっぽい。しかしパラメータによって処理後のtensorの次元が異なっていてそれに合わせた空のtensorを作るのはあまりにも面倒くさいと頭を抱えていたところようやくやり方を見つけました。
参考URL : Appending to a tensor
僕が頭を抱えていたところ
ここは僕個人の問題なので読み飛ばしていただいて構いません。
1次元畳み込みtorch.Conv1d
をつかってチャネルごとの特徴量を抽出した後、それらを結合したかった。
やり方
- 一般的なやり方通り空の配列[]を作る
- forループの中で処理したtensorを空の配列にappendする
- forループ終了後は
torch.cat
でリストの中身のtensorをくっつけたい次元を指定してconcatenate.
model.py
features = []
for i in range(x.shape[1]):
x_conved = cnn1d(x[ :, i, :])
features.append(x_conved)
features = torch.cat(features, dim = 1)
なんでこんな簡単なこと思いつかなかったんだろう・・・