300x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- AI
- 리눅스
- PYTHON
- 동적프로그래밍
- 운영체제
- DFS
- 네트워크
- nlp
- 동적 프로그래밍
- 프로그래밍
- OS
- linux
- CSS
- 킥스타트
- 파이썬
- 알고리즘
- 순열
- kick start
- 딥러닝
- google coding competition
- BFS
- 백준
- 코딩
- 그래프
- 프로그래머스
- dp
- 브루트포스
- 구글 킥스타트
- 코딩테스트
- 코딩 테스트
Archives
- Today
- Total
오뚝이개발자
딥러닝 행렬 계산 도식화, 행렬 계산 과정 본문
728x90
300x250
딥러닝 층을 구성할 때 행렬 계산이 어떻게 이루어지는지를 이해하는 것이 중요하다. 그래야 행과 열의 수를 잘 맞추어 계산을 할 수 있기 때문이다. 이 글에선 Keras를 사용한 코드에서 실제 행렬 연산이 어떻게 이루어지는지 그림으로 도식화하여 설명하고자 한다. 아래와 같은 간단한 딥러닝 모델을 구성하는 코드가 있다고 해보자.
network.add(layers.Dense(512, activation='relu', input_shape=(28*28,)))
network.add(layers.Dense(10, activation='softmax'))
network.fit(train_images, train_labels, epochs=5, batch_size=128)
keras의 Dense() 메서드 안의 수는 차원 수(은닉 유닛 수)를 나타낸다. 코드에서 첫 줄의 행렬 연산을 그림으로 표현하면 아래와 같다.
먼저 input 행렬을 살펴보자.
- batch_size=128이므로 128개의 sample data를 보겠다는 의미이다. 따라서 input 행렬의 행은 128이 된다.
- input 행렬의 열 갯수는 하나의 sample data가 몇 차원 벡터로 나타내지는지를 가리킨다. 코드 첫 번째 줄에서 input_shape=(28*28,)로 나타내므로 input 행렬의 열 갯수는 784가 된다.
다음으로 W1 행렬을 살펴보자.
- 먼저 첫 째줄에서 512개의 hidden unit을 사용하기로 했으므로 W1의 열 갯수는 512개가 된다.
- W1의 행 갯수는 결국 input에서 하나의 sample data와 연산을 해야하므로 784개가 된다.
회색으로 작게 표현한 사각형은 bias를 나타낸다.
- bias는 항상 뉴런에 붙어있다.
- 즉, 뉴런 수 = bias 차원 수
- 따라서, 여기서 b는 1x512 사이즈이다.
위에서 계산한 dense1은 다시 두 번째 hidden layer의 input이 된다. 이 input과 연산이 행해지는 W2는 위에서 설명한 것과 같은 원리로 코드 상에 10개의 은닉 유닛을 쓰기로 하였으므로, 512x10 사이즈가 된다. 결과적으로 result는 128*10의 행렬이 나온다.
728x90
300x250
'AI > 케라스 창시자에게 배우는 딥러닝' 카테고리의 다른 글
[Keras] 케라스의 내부 시스템 구조 (0) | 2021.10.05 |
---|---|
케라스 창시자에게 배우는 딥러닝 책 실습 코드 (0) | 2021.09.26 |
Comments