[모두의 딥러닝] TensorFlow CNN Basics
📗강의노트/모두의 딥러닝

[모두의 딥러닝] TensorFlow CNN Basics

728x90
반응형

Sung Kim 님의 "모두의 딥러닝" 강의노트입니다

좋은 강의 감사드립니다!

https://www.youtube.com/watch?v=mQGwjrStQgg&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&index=5




Filter를 사용하여 conv 값을 뽑아냄 

 뽑아낸 값을 양이 많아지기에 작게 sub-sampling을 해준다.  

마지막으로 feature extraction의 과정을 거친다. 이런 최종 값들은 FC network를 통해 최종값을 도출할 수 있다. 




3x3x1(색상) 이미지 / 필터도 같은 색상을 가짐



tf.InteractiveSession()

생성시 자기 자신을 기본 세션으로 설치한다는 것입니다. Tensor.eval()메서드와 Operation.run()메서드는 연산을 실행하기위해 그 세션을 사용할 .


1개의 image를 사용할 것인가에 대한 수치이다. 3x3이고 1은 색상을 말한다.

순서대로 1,2,3 / 4,5,6 / 7,8,9 가 됨




필터 : 2by2 이고 1은 색상이고(image의 color와 같아야함), 끝은 필터의 갯수를 의미한다. 

필터를 그림위에 올려놓고 마주보고 숫자끼리 곱해서 더하는 과정을 거친다

1x1 + 2x1 + 4x1 + 5x1 = 12 가 되어 입력된다. 




필터를 이동하면서 계속 숫자를 채우면 된다. 




tf.nn.conv2d로 쉽게 구현할 수 있다. 
image와 weight를 넣고 stride를 [1,1,1,1]  1by1로 준다. 




Padding 옵션은 SAME이라고 주면 filter사이즈에 상관없이 stride가 1x1일 때, conv으로 나오는 image의 사이즈를 원래 image 사이즈와 같게 해주는 것이다. 
zero-padding을 통해서 입력되는 size와 출력되는 size가 같게 되는 것이다. 

앞선 방식과 같이 conv의 image를 채워준다.






필터의 갯수를 여러개도 했을 때이다. 
Weight.shape (2,2,1,3)으로 3개의 필터를 지정한다. 
[  ]안의 float 개수가 3개여서 3개로 지정됨 

그러면 1장으로부터 3장의 이미지가 나오게 된다. 

이제 pooling의 과정을 거쳐야한다. 




Ksize = [1,2,2,1]
Strides = [1,1,1,1]

zero-padding을 통해 0을 채우고 각각의 filter에서 가장 큰 값을 뽑아낸다. 
그러면 4,3,2,1이 도출된다. 




실제 MNIST 이미지에 적용시켜보자

기존의 shape이 (28,28) 인 것을 알기 때문에, img를 reshape해준다. 




그리고 Convolution layer를 통과시켜볼 수 있다. image를 image처럼 reshape해줘야 한다. 

       (-1,28,28,1)
N개의 여러이미지 / 28x28이고 / 색상


W : 
       (3,3,1,5)
3x3의 사이즈 / 색상 / Filter의 갯수

Stride :
       (1,2,2,1)
        2칸씩 움직이겠다. (2x2)

[batch x 너비 x 높이 x 깊이] 순서이다. 맨 앞의 batch가 1이란것은 input image를 건너뛰지 않고 하나씩 다 보겠다는 의미, 그리고 맨뒤의 depth가 1인 것은 이미지의 컬러 depth가 1 (grayscale)이라 그런 것


padding=SAME을 하면 기존에 stride가 1x1일 때와 똑같은 이미지를 만든다고 했는데 , 2x2가 되면 반으로 줄어들게 된다

valid 일때, (N-F)/stride  + 1 same일때, N/stride

28x28  -> 14x14로 출력  (stride = 2)

필터가 5개여서 총 5개의 결과가 나왔다. 
W은 random한 값을 줬기 때문에, 이미지 하나에서 조금씩 다른 이미지들을 convolution 으로 뽑아낸 것이다. 





(Conv2d, ksize=[1,2,2,1], stride=[1,2,2,1], padding=’SAME’)
이전에 나왔던 이미지 (5개)/ 커널 사이즈 2x2 / stride= 2x2 

기존에 이미 stride=2로 14x14로 줄었다. max-pooling 때도 stride=2 이기에 
7x7로 나올 것이다. 

이미지가 sub sampling되어 있다. 






728x90
반응형