Theanoのdimshuffleについて
コードを読んでいると時々出てくる。
もう少し理解を深めるために色々試したのでメモ。
Documantationは下記
Basic Tensor Functionality — Theano 1.0.0 documentation
dimshuffle関数は簡単に言うと次元の置換を行う関数。
一番簡単な例は下記(行列の転置として使う例)
import theano import theano.tensor as T import numpy as np row = 4 column = 2 mtx = theano.shared(np.random.uniform(-1.0, 1.0, (row, column)).astype(theano.config.floatX)) mtx.eval() [[-0.706 -0.815] [-0.627 -0.309] [-0.206 0.078] [-0.162 0.37 ]] mtx.dimshuffle(1, 0).eval() [[-0.706 -0.627 -0.206 -0.162] [-0.815 -0.309 0.078 0.37 ]]
次元を変える。
次の層の入力として扱うため次元を変更する例。
(この場合、行列から3階テンソルになる。)
mtx.dimshuffle('x', 0, 1).eval() [[[-0.706 -0.815] [-0.627 -0.309] [-0.206 0.078] [-0.162 0.37 ]]]
ベクトル→行列も同じ
vec = theano.shared(np.random.uniform(-1.0, 1.0, row).astype(theano.config.floatX)) vec.eval() [-0.166 0.441 -1. -0.395] vec.dimshuffle(0, 'x').eval() # vec.reshape((4, 1)).eval() [[-0.166] [ 0.441] [-1. ] [-0.395]] vec.dimshuffle('x', 0).eval() [[-0.166 0.441 -1. -0.395]] # vec.reshape((1, 4))
次元をあげたい場合、x
を指定する。
(その次元数は1となる。)
※reshapeでも同じことが出来るけど、明確な使い分け方は不明
(dimshuffleの方が軸の指定だけなので使いやすいかな。。)