Python
機械学習
MachineLearning
DeepLearning
Keras

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


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

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