ㅁFully connected layer 의 문제점
- 데이터의 형상이 무시된다.
- 예를 들어 256 * 256 이미지 데이터 n개가 있다고 가정해보자. 지금까지 우리가 배운것에 의하면 이것을 행렬로 바꿔서 256*256 = 65,536 의 col 을 가지고 n개의 row 가진 Matrix 를 가질것이고 여기에 W1, W2 ... 등을 곱해서 마지막에 classification 하는 Network Layer 를 구성할 것이다. 하지만 여기에선 간과 된것이 이미지라 함은 픽셀로 부터 좌우 뿐 아니라 상하의 데이터도 관계가 있는 것인데 이를 고려하지 않은 것이다. 즉 위에서 정리한 것과 같이 데이터의 형상을 무시한것이다.
- 그래서 CNN 레이어는 중간에는 Convolution layer 와 max pooling layer, activation layer 등으로 쌓고 마지막에 fully connected layer 를 통해 classification 하는 모습을 띈다.
- 물론 이게 가장 basic 한 CNN Layer 의 구조이고, CNN 의 Layer 구성 방법 관련해서는 굉장히 많은 논문이 공개되어 있다.
ㅁ 합성곱 연산
그림과 같이 노랑색 모양의 사각형( 3 * 3 ) 의 Weight 이 한칸씩 윈도우 형식으로 이동하면서 계산을 하는 것을 CNN Layer 에서의 합성곱 연산이라 한다.
ㅁ 패딩, 스트라이드
- 위 합성곱 연산에서 문제점이 점점 데이터가 소실 된다는 것이다. 그래서 해결책으로 패딩이란것이 제시되었는데 데이터의 사이즈가 줄어들지 않도록 가장자리에 가상의 값인 0으로 채워서 합성곱 레이어를 지나도 사이즈가 줄어들지 않도록 하는 기법이다.
ㅁ 풀링
ㅁ CNN in Tensorflow
... # L1 ImgIn shape=(?, 28, 28, 1) W1 = tf.Variable(tf.random_normal([3, 3, 1, 32], stddev=0.01)) # Conv -> (?, 28, 28, 32) # Pool -> (?, 14, 14, 32) L1 = tf.nn.conv2d(X_img, W1, strides=[1, 1, 1, 1], padding='SAME') L1 = tf.nn.relu(L1) L1 = tf.nn.max_pool(L1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') ...
conv2d
conv2d( input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None )
- input : [batch, in_height, in_width, in_channels]
- batch : 데이터 갯수
- in_height : row 수
- in_width : col 수
- in_channels : 채널 수
- filter : [filter_height, filter_width, in_channels, out_channels]
- filter_height : filter row 수
- filter_width : filter col 수
- in_channels : filter channel 수
- out_channels : output channels 수
- padding : "VAILD", "SAME"
- VALID : 패딩없이 하여 데이터의 사이즈가 줆.
- SAME : 패딩을 적용하여 데이터 사이즈가 유지됌.
- use_cudnn_on_gpu : gpu 사용 여부 ( default : true )
- data_format : ( default : "NHWC" ) [batch, height, width, channels]
- name : optional ( A name for the operation )
max_pool
max_pool( value, ksize, strides, padding, data_format='NHWC', name=None )
- value : shape ( [batch, height, width, channels] )
- ksize : filter size ( The size of the window for each dimension of the input tensor )
- strides : filter sliding 을 얼칸큼씩 할건지
- data_format : ( default : "NHWC" ) [batch, height, width, channels]
- name : optional ( A name for the operation )
'Deep Learning' 카테고리의 다른 글
4. RNN (0) | 2017.05.30 |
---|---|
2. 학습관련 기술들 (0) | 2017.05.14 |
1. 오차역전파법 ( Backpropagation ) (0) | 2017.05.14 |
0. 딥러닝 기초지식 (0) | 2017.05.12 |