batch size=2では動かない理由、Tensorのサイズから考える
中山さんの本ではbatch_size=32と指定
この例から、batch_size=1でなければならないわけではなさそう(PyTorch Tutorial上の制約と思われる)
Embedding
(語彙数 10, embeddingサイズ 6)を指定
input (*)
IntTensor or LongTensor of arbitrary shape containing the indices to extract
今回は (5)
👉 (2, 5)に変えてみる(batch_size=2)
output (*, H)
* is the input shape
H = embedding_dim(Embedding初期化で渡す第2引数)
今回は (5, 6)
👉 (2, 5, 6)
LSTM
(embeddingサイズ 6, 隠れ層 6)を指定
inputは2つ: input, (h_0, c_0)
(h_0, c_0)は渡していない
batch_first=False(デフォルト値)なので、inputは (L, N, H_in) のTensor
N = batch size
L = sequence length
H_in = input_size(LSTM初期化で渡す第1引数)
今回は (5, 1, 6)
👉 (5, 2, 6)
outputも2つ: output, (h_n, c_n)
(h_n, c_n)は後続処理で使っていない(捨てている)
batch_first=False(デフォルト値)なので、outputは (L, N, D * H_out) のTensor
D = 2 if bidirectional=True otherwise 1(今回は1)
H_out = proj_size if proj_size>0 otherwise hidden_size(今回はhidden_size=6。LSTM初期化で渡す第2引数)
proj_sizeはデフォルト値が0
今回は (5, 1, 6)
👉 (5, 2, 6)
Linear
(隠れ層 6, 分類先クラス数 4) を指定
Linear層はin_featuresをout_featuresに変える(次元を追加/削除)
input (*, H_in)
∗ means any number of dimensions including none
H_in = in_features(Linear初期化で渡す第1引数)
今回は (*, 6)
👉 (5, 2, 6)
output (*, H_out)
all but the last dimension are the same shape as the input
「最後の次元を除き、入力と同じshape(形状)」
H_out = out_features(Linear初期化で渡す第2引数)
今回は (*, 4)
👉 (5, 2, 4)
結論:モデル自体はbatch_size=2にしても動く