LoginSignup
144
149

More than 5 years have passed since last update.

[図解]ディープラーニングのパラメーター数ってどうやって数えるんだっけという人へ

Last updated at Posted at 2019-02-04

パラメータ数の計算まとめ

NN , CNN , Embedding , SimpleRNN, LSTM, GRU

CNN, NN(Dense)


model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',
                        input_shape=(150, 150, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(GlobalAveragePooling2D())
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

* MaxPooling2Dは2*2の範囲ごとの最大値を取るだけのためパラメーターなし
* GlobalAveragePooling2Dは各チャンネルの平均を取るだけのためパラメーターなし

Conv2D(1つ目)

3 * 3 * 3 * 32 + 32 = 896

フィルターの縦 * フィルターの横 * 入力のチャンネル数 * 出力のチャンネル数 + バイアス(1チャンネルごとに1つ)

Conv2D(2つ目)

3 * 3 * 32 * 64 + 64 = 18496

フィルターの縦 * フィルターの横 * 入力のチャンネル数 * 出力のチャンネル数 + バイアス(1チャンネルごとに1つ)

図解

image.png

Dense

128 * 32 + 32 = 4128

入力ユニット数 * 出力ユニット数 + バイアス(出力1ユニットごとに1つ)
シンプルなニューラルネットワーク, バイアスを忘れずに

図解

image.png

Embedding , SimpleRNN, LSTM, GRU

model = Sequential()
model.add(Embedding(4000,32,input_length=20))
model.add(LSTM(64))
#model.add(SimpleRNN(64))
#model.add(GRU(64))
model.add(Dense(3))
model.add(Activation("softmax"))

Embedding

4000 * 32 = 128000

・Embedding層は全結合層だが、バイアスはない
・ワンホットベクトルを小さな(密な)ベクトルに変換するための層

図解

image.png

SimpleRNN

32 * 64 + 64 * 64 + 64 = 6208

・入力に対しての重み
入力の次元数x隠れ状態の次元数 
→ 32*64

・隠れ状態に対しての重み
隠れ状態の次元数 x 隠れ状態の次元数
→ 64*64

・バイアス
隠れ状態の次元数
→ 64

図解

image.png

LSTM

32 * 64 * 4 + 64 * 64 * 4 + 64 * 4 = 24832

・入力に対しての重み
入力の次元数 * 隠れ状態の次元数 * 4    (forgetに1つ、inputに2つ、outputに1つ)
→ 32 * 64 * 4

・隠れ状態に対しての重み
 隠れ状態(記憶セル)の次元数 * 隠れ状態の次元数 * 4   (forgetに1つ、inputに2つ、outputに1つ)
→ 64 * 64 * 4

・バイアス
隠れ状態の次元数 * 4      (forgetに1つ、inputに2つ、outputに1つ)
→ 64 * 4

図解

image.png

image.png

GRU

32*64*3 + 64*64*3 + 64*3 = 18624

・入力に対しての重み
入力の次元数 * 隠れ状態の次元数 * 3    (リセットゲートで1つ、更新ゲートで2つ)
→ 32 * 64 * 3

・隠れ状態に対しての重み 
隠れ状態の次元数 * 隠れ状態の次元数 * 3   (リセットゲートで1つ、更新ゲートで2つ)
→ 64 * 64 * 3

・バイアス
隠れ状態の次元数 * 3   (リセットゲートで1つ、更新ゲートで2つ)
→ 64 * 3

図解

image.png

image.png

144
149
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
144
149