심층 학습 모델의 매개 변수 수를 계산합니다.
17814 단어 Keras파이썬CNNDeepLearning심층 학습
1. 소개
문득 딥 러닝의 파라미터는 어떻게 계산할 수 있을까 생각해, 이해를 확인하기 위해서도 계산해 보았습니다.
2. 모델 구성
Keras를 사용하여 모델을 구성해 봅니다.
이번에 작성하는 모델은 256x256의 RBG의 화상을 입력으로서 9개의 카테고리로 분류하는 모델이 됩니다.
구현
필요한 모듈을 가져옵니다.
from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.layers.core import Activation
from keras.layers.core import Flatten, Dropout
from keras.layers.core import Dense
분류할 클래스 수를 상수로 정의하고,
num_class = 9
모델을 구성합니다.
# モデルの作成
model = Sequential()
model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu', input_shape=(256, 256, 3)))
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu'))
model.add(MaxPooling2D(pool_size=(3, 3)))
model.add(Dropout(0.5))
model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu'))
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu'))
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten()) #Flatten()により特徴マップをベクトルに変換
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_class, activation='softmax')) #Softmax関数にて、9 クラスの確度として出力
모델 정보를 출력합니다.
model.summary() # モデル情報の表示
다음과 같은 출력을 얻을 수 있습니다. 이 중에서 가장 오른쪽에 파라미터 수가 출력되고 있습니다. 이번 모델에서는 6,029,097개의 파라미터가 학습에 의해 조정됩니다.
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 256, 256, 32) 896
_________________________________________________________________
conv2d_2 (Conv2D) (None, 254, 254, 32) 9248
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 84, 84, 32) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 84, 84, 32) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 84, 84, 32) 9248
_________________________________________________________________
conv2d_4 (Conv2D) (None, 82, 82, 32) 9248
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 41, 41, 32) 0
_________________________________________________________________
dropout_2 (Dropout) (None, 41, 41, 32) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 41, 41, 32) 9248
_________________________________________________________________
conv2d_6 (Conv2D) (None, 39, 39, 32) 9248
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 19, 19, 32) 0
_________________________________________________________________
dropout_3 (Dropout) (None, 19, 19, 32) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 11552) 0
_________________________________________________________________
dense_1 (Dense) (None, 512) 5915136
_________________________________________________________________
dropout_4 (Dropout) (None, 512) 0
_________________________________________________________________
dense_2 (Dense) (None, 128) 65664
_________________________________________________________________
dropout_5 (Dropout) (None, 128) 0
_________________________________________________________________
dense_3 (Dense) (None, 9) 1161
=================================================================
Total params: 6,029,097
Trainable params: 6,029,097
Non-trainable params: 0
_________________________________________________________________
3. 파라미터 수 계산
3-1. CNN 계층
먼저 첫 번째 레이어의 CNN 레이어를 살펴 보겠습니다. 필터수:32장, 필터 사이즈:3x3, 입력 채널:3(RGB), 출력 채널:3을 지정하고 있습니다.
model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu', input_shape=(256, 256, 3)))
=================================================================
conv2d_1 (Conv2D) (None, 256, 256, 32) 896
_________________________________________________________________
파라미터 수는 다음 식으로 구할 수 있습니다.
파라미터 수 = 필터 세로 사이즈 x 필터 가로 사이즈 x 입력 채널 수 x 출력 채널 수 + 바이어스 x 출력 채널 수
param = 3 x 3 x 3 x 32 + 1 x 32 = 896
마찬가지로 두 번째 레이어도 계산해 보겠습니다.
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu', input_shape=(256, 256, 3)))
=================================================================
conv2d_2 (Conv2D) (None, 254, 254, 32) 9248
_________________________________________________________________
이번에는 제 2 레이어에 대한 입력이 32 채널이므로,
파라미터 수 = 필터 세로 사이즈 x 필터 가로 사이즈 x 입력 채널 수 x 출력 채널 수 + 바이어스 x 출력 채널 수
param = 3 x 3 x 32 x 32 + 1 x 32 = 9248
제3,4,5,6의 Conv2D 레이어도 마찬가지로 계산할 수 있습니다.
3-2. Flatten 레이어
특징 맵을 벡터화하고 있습니다. 1 차원으로 떨어지고 있습니다. 여기에서는 학습에 의해 조정하는 파라미터는 아니지만,
_________________________________________________________________
dropout_3 (Dropout) (None, 19, 19, 32) 0
_________________________________________________________________
보다 벡터 차원은 19 x 19 x 32 = 11552입니다.
3-3. Dense층(숨겨진 층)
특징량을 벡터화하는 Flatten 레이어의 다음 Dense 레이어에서
파라미터 수 = 입력 사이즈 x 출력 사이즈 + 바이어스가되기 때문에
param = 11552 x 512 + 512 = 5915136
그 다음 숨겨진 층도 마찬가지로
dense_2 (Dense) param = 512 x 128 + 512 = 65664
dense_3 (Dense) param = 128 x 9 + 9 = 1161
4. 정리
새로 만든 모델을 확인합니다.
가장 오른쪽 Param의 값을 더하면 6,029,097입니다. 학습에서는 이 매개변수가 조정됩니다.
그리고 학습에 의해 조정된 파라미터가 모델의 일부가 되어, 추론에 있어서는, 모델을 경량화 등하지 않는 한, 이러한 파라미터가 사용되어 계산되고 있습니다.
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 256, 256, 32) 896
_________________________________________________________________
conv2d_2 (Conv2D) (None, 254, 254, 32) 9248
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 84, 84, 32) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 84, 84, 32) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 84, 84, 32) 9248
_________________________________________________________________
conv2d_4 (Conv2D) (None, 82, 82, 32) 9248
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 41, 41, 32) 0
_________________________________________________________________
dropout_2 (Dropout) (None, 41, 41, 32) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 41, 41, 32) 9248
_________________________________________________________________
conv2d_6 (Conv2D) (None, 39, 39, 32) 9248
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 19, 19, 32) 0
_________________________________________________________________
dropout_3 (Dropout) (None, 19, 19, 32) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 11552) 0
_________________________________________________________________
dense_1 (Dense) (None, 512) 5915136
_________________________________________________________________
dropout_4 (Dropout) (None, 512) 0
_________________________________________________________________
dense_2 (Dense) (None, 128) 65664
_________________________________________________________________
dropout_5 (Dropout) (None, 128) 0
_________________________________________________________________
dense_3 (Dense) (None, 9) 1161
=================================================================
Total params: 6,029,097
Trainable params: 6,029,097
Non-trainable params: 0
_________________________________________________________________
Reference
이 문제에 관하여(심층 학습 모델의 매개 변수 수를 계산합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hiromasat/items/43e20c8da6d21f2578dc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Keras를 사용하여 모델을 구성해 봅니다.
이번에 작성하는 모델은 256x256의 RBG의 화상을 입력으로서 9개의 카테고리로 분류하는 모델이 됩니다.
구현
필요한 모듈을 가져옵니다.
from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.layers.core import Activation
from keras.layers.core import Flatten, Dropout
from keras.layers.core import Dense
분류할 클래스 수를 상수로 정의하고,
num_class = 9
모델을 구성합니다.
# モデルの作成
model = Sequential()
model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu', input_shape=(256, 256, 3)))
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu'))
model.add(MaxPooling2D(pool_size=(3, 3)))
model.add(Dropout(0.5))
model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu'))
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu'))
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten()) #Flatten()により特徴マップをベクトルに変換
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_class, activation='softmax')) #Softmax関数にて、9 クラスの確度として出力
모델 정보를 출력합니다.
model.summary() # モデル情報の表示
다음과 같은 출력을 얻을 수 있습니다. 이 중에서 가장 오른쪽에 파라미터 수가 출력되고 있습니다. 이번 모델에서는 6,029,097개의 파라미터가 학습에 의해 조정됩니다.
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 256, 256, 32) 896
_________________________________________________________________
conv2d_2 (Conv2D) (None, 254, 254, 32) 9248
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 84, 84, 32) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 84, 84, 32) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 84, 84, 32) 9248
_________________________________________________________________
conv2d_4 (Conv2D) (None, 82, 82, 32) 9248
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 41, 41, 32) 0
_________________________________________________________________
dropout_2 (Dropout) (None, 41, 41, 32) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 41, 41, 32) 9248
_________________________________________________________________
conv2d_6 (Conv2D) (None, 39, 39, 32) 9248
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 19, 19, 32) 0
_________________________________________________________________
dropout_3 (Dropout) (None, 19, 19, 32) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 11552) 0
_________________________________________________________________
dense_1 (Dense) (None, 512) 5915136
_________________________________________________________________
dropout_4 (Dropout) (None, 512) 0
_________________________________________________________________
dense_2 (Dense) (None, 128) 65664
_________________________________________________________________
dropout_5 (Dropout) (None, 128) 0
_________________________________________________________________
dense_3 (Dense) (None, 9) 1161
=================================================================
Total params: 6,029,097
Trainable params: 6,029,097
Non-trainable params: 0
_________________________________________________________________
3. 파라미터 수 계산
3-1. CNN 계층
먼저 첫 번째 레이어의 CNN 레이어를 살펴 보겠습니다. 필터수:32장, 필터 사이즈:3x3, 입력 채널:3(RGB), 출력 채널:3을 지정하고 있습니다.
model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu', input_shape=(256, 256, 3)))
=================================================================
conv2d_1 (Conv2D) (None, 256, 256, 32) 896
_________________________________________________________________
파라미터 수는 다음 식으로 구할 수 있습니다.
파라미터 수 = 필터 세로 사이즈 x 필터 가로 사이즈 x 입력 채널 수 x 출력 채널 수 + 바이어스 x 출력 채널 수
param = 3 x 3 x 3 x 32 + 1 x 32 = 896
마찬가지로 두 번째 레이어도 계산해 보겠습니다.
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu', input_shape=(256, 256, 3)))
=================================================================
conv2d_2 (Conv2D) (None, 254, 254, 32) 9248
_________________________________________________________________
이번에는 제 2 레이어에 대한 입력이 32 채널이므로,
파라미터 수 = 필터 세로 사이즈 x 필터 가로 사이즈 x 입력 채널 수 x 출력 채널 수 + 바이어스 x 출력 채널 수
param = 3 x 3 x 32 x 32 + 1 x 32 = 9248
제3,4,5,6의 Conv2D 레이어도 마찬가지로 계산할 수 있습니다.
3-2. Flatten 레이어
특징 맵을 벡터화하고 있습니다. 1 차원으로 떨어지고 있습니다. 여기에서는 학습에 의해 조정하는 파라미터는 아니지만,
_________________________________________________________________
dropout_3 (Dropout) (None, 19, 19, 32) 0
_________________________________________________________________
보다 벡터 차원은 19 x 19 x 32 = 11552입니다.
3-3. Dense층(숨겨진 층)
특징량을 벡터화하는 Flatten 레이어의 다음 Dense 레이어에서
파라미터 수 = 입력 사이즈 x 출력 사이즈 + 바이어스가되기 때문에
param = 11552 x 512 + 512 = 5915136
그 다음 숨겨진 층도 마찬가지로
dense_2 (Dense) param = 512 x 128 + 512 = 65664
dense_3 (Dense) param = 128 x 9 + 9 = 1161
4. 정리
새로 만든 모델을 확인합니다.
가장 오른쪽 Param의 값을 더하면 6,029,097입니다. 학습에서는 이 매개변수가 조정됩니다.
그리고 학습에 의해 조정된 파라미터가 모델의 일부가 되어, 추론에 있어서는, 모델을 경량화 등하지 않는 한, 이러한 파라미터가 사용되어 계산되고 있습니다.
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 256, 256, 32) 896
_________________________________________________________________
conv2d_2 (Conv2D) (None, 254, 254, 32) 9248
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 84, 84, 32) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 84, 84, 32) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 84, 84, 32) 9248
_________________________________________________________________
conv2d_4 (Conv2D) (None, 82, 82, 32) 9248
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 41, 41, 32) 0
_________________________________________________________________
dropout_2 (Dropout) (None, 41, 41, 32) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 41, 41, 32) 9248
_________________________________________________________________
conv2d_6 (Conv2D) (None, 39, 39, 32) 9248
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 19, 19, 32) 0
_________________________________________________________________
dropout_3 (Dropout) (None, 19, 19, 32) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 11552) 0
_________________________________________________________________
dense_1 (Dense) (None, 512) 5915136
_________________________________________________________________
dropout_4 (Dropout) (None, 512) 0
_________________________________________________________________
dense_2 (Dense) (None, 128) 65664
_________________________________________________________________
dropout_5 (Dropout) (None, 128) 0
_________________________________________________________________
dense_3 (Dense) (None, 9) 1161
=================================================================
Total params: 6,029,097
Trainable params: 6,029,097
Non-trainable params: 0
_________________________________________________________________
Reference
이 문제에 관하여(심층 학습 모델의 매개 변수 수를 계산합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hiromasat/items/43e20c8da6d21f2578dc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu', input_shape=(256, 256, 3)))
=================================================================
conv2d_1 (Conv2D) (None, 256, 256, 32) 896
_________________________________________________________________
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu', input_shape=(256, 256, 3)))
=================================================================
conv2d_2 (Conv2D) (None, 254, 254, 32) 9248
_________________________________________________________________
_________________________________________________________________
dropout_3 (Dropout) (None, 19, 19, 32) 0
_________________________________________________________________
새로 만든 모델을 확인합니다.
가장 오른쪽 Param의 값을 더하면 6,029,097입니다. 학습에서는 이 매개변수가 조정됩니다.
그리고 학습에 의해 조정된 파라미터가 모델의 일부가 되어, 추론에 있어서는, 모델을 경량화 등하지 않는 한, 이러한 파라미터가 사용되어 계산되고 있습니다.
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 256, 256, 32) 896
_________________________________________________________________
conv2d_2 (Conv2D) (None, 254, 254, 32) 9248
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 84, 84, 32) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 84, 84, 32) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 84, 84, 32) 9248
_________________________________________________________________
conv2d_4 (Conv2D) (None, 82, 82, 32) 9248
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 41, 41, 32) 0
_________________________________________________________________
dropout_2 (Dropout) (None, 41, 41, 32) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 41, 41, 32) 9248
_________________________________________________________________
conv2d_6 (Conv2D) (None, 39, 39, 32) 9248
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 19, 19, 32) 0
_________________________________________________________________
dropout_3 (Dropout) (None, 19, 19, 32) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 11552) 0
_________________________________________________________________
dense_1 (Dense) (None, 512) 5915136
_________________________________________________________________
dropout_4 (Dropout) (None, 512) 0
_________________________________________________________________
dense_2 (Dense) (None, 128) 65664
_________________________________________________________________
dropout_5 (Dropout) (None, 128) 0
_________________________________________________________________
dense_3 (Dense) (None, 9) 1161
=================================================================
Total params: 6,029,097
Trainable params: 6,029,097
Non-trainable params: 0
_________________________________________________________________
Reference
이 문제에 관하여(심층 학습 모델의 매개 변수 수를 계산합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hiromasat/items/43e20c8da6d21f2578dc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)