Return to Video

PyTorch Lecture 10: Basic CNN

  • 0:00 - 0:02
    이번 강의에서는
  • 0:02 - 0:05
    가장 유명한 신경망 아키텍처 중 하나인
  • 0:05 - 0:07
    CNN에 대해 다뤄보고자 합니다
  • 0:07 - 0:10
    CNN은 이미지 프로세싱이나
    자연어 처리 등에서 아주 잘 동작합니다
  • 0:10 - 0:14
    CNN은 이미지 프로세싱이나
    자연어 처리 등에서 아주 잘 동작합니다
  • 0:14 - 0:17
    이게 이미지를 입력으로 받는
    전형적인 CNN 아키텍처입니다
  • 0:17 - 0:19
    이게 이미지를 입력으로 받는
    전형적인 CNN 아키텍처입니다
  • 0:19 - 0:23
    우선 이 이미지에 대해 합성곱을 하여
  • 0:23 - 0:27
    많은 특징맵을 만들어냅니다
  • 0:27 - 0:29
    그리고 이 합성곱으로부터 정보를 축소시키는
    서브샘플링을 하고 나면
  • 0:29 - 0:31
    그리고 이 합성곱으로부터 정보를 축소시키는
    서브샘플링을 하고 나면
  • 0:31 - 0:33
    그리고 이 합성곱으로부터 정보를 축소시키는
    서브샘플링을 하고 나면
  • 0:33 - 0:36
    합성곱과 서브샘플링의 레이어들이 생깁니다
  • 0:36 - 0:41
    합성곱과 서브샘플링의 레이어들이 생깁니다
  • 0:41 - 0:42
    이 부분에서의 모든 정보는
    선형 레이어로 연결되는데
  • 0:42 - 0:46
    이 부분에서의 모든 정보는
    선형 레이어로 연결되는데
  • 0:46 - 0:48
    이 부분에서의 모든 정보는
    선형 레이어로 연결되는데
  • 0:48 - 0:50
    이 선형 레이어는 완전 연결 레이어 또는
    dense net이라고도 합니다
  • 0:50 - 0:56
    이 선형 레이어는 완전 연결 레이어 또는
    dense net이라고도 합니다
  • 0:56 - 1:00
    전형적인 Softmax classifier와 같죠
  • 1:00 - 1:02
    이것들은 주어진 이미지의
    레이블을 예측하는 값이 됩니다
  • 1:02 - 1:05
    이것들은 주어진 이미지의
    레이블을 예측하는 값이 됩니다
  • 1:05 - 1:08
    그렇다면 합성곱이란 무엇일까요?
  • 1:08 - 1:10
    이렇게 귀여운 이미지가 하나 있다고
    가정해 봅시다
  • 1:10 - 1:13
    가로 길이와 세로 길이가 있겠죠
  • 1:13 - 1:16
    이 경우에는 RGB색상도 있을테니
  • 1:16 - 1:18
    깊이는 3이 됩니다
  • 1:18 - 1:22
    만약 여러분이 간단한
    Softmax classifier를 사용한다면
  • 1:22 - 1:24
    우리는 모든 픽셀 정보를
    입력으로 사용하게 될 겁니다
  • 1:24 - 1:27
    우리는 모든 픽셀 정보를
    입력으로 사용하게 될 겁니다
  • 1:27 - 1:30
    하지만 합성곱의 핵심 아이디어는
  • 1:30 - 1:32
    한 번에 아주 작은 부분의 이미지만 다루는 것입니다
  • 1:32 - 1:34
    한 번에 아주 작은 부분의 이미지만 다루는 것입니다
  • 1:34 - 1:39
    그래서 우리는 이미지보다 훨씬 작은 필터를 사용합니다
  • 1:39 - 1:41
    주로 패치라고 불리는
    이미지의 작은 부분만을 다루게 됩니다
  • 1:41 - 1:44
    주로 패치라고 불리는
    이미지의 작은 부분만을 다루게 됩니다
  • 1:44 - 1:46
    여기에 어떤 조작을 가하고나면
  • 1:46 - 1:49
    이 패치로부터 한가지 값을 얻어낼 수 있습니다
  • 1:49 - 1:53
    물론 이 필터는 전체 이미지를 다룰 것입니다
  • 1:53 - 1:55
    그래야 전체 이미지를 다 볼 수 있겠죠
  • 1:55 - 1:56
    한 번에 작은 부분만 본다는 것이
    합성곱의 핵심 아이디어입니다
  • 1:56 - 1:59
    한 번에 작은 부분만 본다는 것이
    합성곱의 핵심 아이디어입니다
  • 1:59 - 2:01
    한 번에 작은 부분만 본다는 것이
    합성곱의 핵심 아이디어입니다
  • 2:01 - 2:04
    합성곱이 작은 이미지에서
    어떻게 동작하는지 알아봅시다
  • 2:04 - 2:08
    가로세로는 3 x 3
    깊이는 1 입니다
  • 2:08 - 2:09
    이게 우리의 이미지이구요
  • 2:09 - 2:12
    필터 사이즈는 우리가 정해야 합니다
  • 2:12 - 2:13
    2 x 2 필터를 준비하고
    깊이는 이미지와 같게 설정합니다
  • 2:13 - 2:16
    2 x 2 필터를 준비하고
    깊이는 이미지와 같게 설정합니다
  • 2:16 - 2:17
    2 x 2 필터를 준비하고
    깊이는 이미지와 같게 설정합니다
  • 2:17 - 2:19
    자 이제 합성곱을 해보겠습니다
  • 2:19 - 2:23
    기본원리는
    이 2 x 2 필터로 이미지를 보는 것입니다
  • 2:23 - 2:25
    기본원리는
    이 2 x 2 필터로 이미지를 보는 것입니다
  • 2:25 - 2:28
    이미지에서 2 x 2 부분만 보면서
    어떤 계산을 할 것입니다
  • 2:28 - 2:30
    이미지에서 2 x 2 부분만 보면서
    어떤 계산을 할 것입니다
  • 2:30 - 2:32
    이미지에서 2 x 2 부분만 보면서
    어떤 계산을 할 것입니다
  • 2:32 - 2:35
    그리고 필터를 움직입니다
  • 2:35 - 2:37
    이를 움직이는 정도를
    스트라이드(Stride)라고 합니다
  • 2:37 - 2:39
    여기서는 스트라이드가 1이므로
  • 2:39 - 2:41
    우리는 필터를 1스텝씩
    오른쪽으로 움직일 것입니다
  • 2:41 - 2:43
    우리는 필터를 1스텝씩
    오른쪽으로 움직일 것입니다
  • 2:43 - 2:46
    그리고 어떤 연산을 하고나면
    숫자 하나를 얻을 수 있습니다
  • 2:46 - 2:49
    이제 오른쪽으로는 필터를
    더 이상 움직일 공간이 없으므로
  • 2:49 - 2:51
    아래로 움직이겠습니다
  • 2:51 - 2:54
    이것이 합성곱 동작방법입니다
  • 2:54 - 2:58
    그리고 여기서도 마찬가지로 합성곱을 수행하면
  • 2:58 - 2:59
    전체 이미지를 다 돌게 됩니다
  • 2:59 - 3:03
    그 결과로 2 x 2에 대해
    4개의 숫자를 얻을 수 있는데
  • 3:03 - 3:07
    그 결과로 2 x 2에 대해
    4개의 숫자를 얻을 수 있는데
  • 3:07 - 3:11
    이게 바로 합성곱의 출력입니다
  • 3:11 - 3:15
    이 필터로 합성곱 연산을
    어떻게 하는지 알아봅시다
  • 3:15 - 3:17
    여기 픽셀값
    1, 2, 3, 4, 5, 6, 7, 8, 9가 있습니다
  • 3:17 - 3:23
    여기 픽셀값
    1, 2, 3, 4, 5, 6, 7, 8, 9가 있습니다
  • 3:23 - 3:25
    웨이트 값이 있는데요
  • 3:25 - 3:27
    웨이트는 보통 트레이닝 과정을 통해 변화하는데
  • 3:27 - 3:28
    일단 여기서는
  • 3:28 - 3:31
    이렇게 특정 값이 있다고 가정하겠습니다
  • 3:31 - 3:33
    제일 처음 우리가 할 것은
  • 3:33 - 3:37
    필터를 이용하여
    작은 패치를 선택하는 것입니다
  • 3:37 - 3:40
    그리고 그 패치 안의 값들을
  • 3:40 - 3:43
    필터를 이용하여 계산하면
  • 3:43 - 3:46
    숫자값 하나가 생성됩니다
  • 3:46 - 3:47
    어떤 연산을 해야할까요?
  • 3:47 - 3:50
    여기서는 내적 연산이 필요합니다
  • 3:50 - 3:53
    w ・ x이죠
  • 3:53 - 3:57
    이것이 바로 우리가 연산하는 방법입니다
  • 3:57 - 4:08
    여기서는 W가 [0.1, 0.5, 0.3, 0.4]이고
  • 4:08 - 4:14
    X는 [1, 2, 4, 5]가 됩니다
  • 4:14 - 4:16
    X는 [1, 2, 4, 5]가 됩니다
  • 4:16 - 4:21
    내적을 구하기 위해 우리는 이 두 값을 곱하고
  • 4:21 - 4:24
    또 이렇게 두 값을 곱하는 방법을 반복합니다
  • 4:24 - 4:27
    그리고 곱해진 값들을 다 더합니다
  • 4:27 - 4:30
    예를 들어, 여기서는
  • 4:30 - 4:33
    0.1 x 1 = 0.1
  • 4:33 - 4:38
    0.5 x 2 = 1 이런식으로
  • 4:38 - 4:42
    여기는 1.2
  • 4:42 - 4:46
    여기는 2이죠
  • 4:46 - 4:48
    이제 이 값들을 모두 더하면
  • 4:48 - 4:52
    4.3이 됩니다
  • 4:52 - 4:56
    그래서 이 값은 4.3이 되는 것입니다
  • 4:56 - 4:57
    그래서 이 값은 4.3이 되는 것입니다
  • 4:57 - 5:01
    그래서 이 값은 4.3이 되는 것입니다
  • 5:01 - 5:05
    이제 윈도우를 여기로 옮겨보겠습니다
  • 5:05 - 5:12
    같은 방법으로, 필터를 이용해서
  • 5:12 - 5:16
    W・X를 계산합니다
  • 5:16 - 5:20
    우리는 이를 W의 역행렬에 X를 곱한 것으로
  • 5:20 - 5:23
    표현하기도 합니다
  • 5:23 - 5:26
    행렬곱셈을 하는 셈이죠
  • 5:26 - 5:29
    그러면 이 값을 얻을 수 있고
  • 5:29 - 5:30
    이 윈도우를 다시 다른 곳으로 움직이면
  • 5:30 - 5:35
    이 윈도우를 다시 다른 곳으로 움직이면
  • 5:35 - 5:39
    이제 여기 값을 얻을 수 있습니다
  • 5:39 - 5:41
    패딩을 추가하는 방법도 널리 쓰입니다
  • 5:41 - 5:42
    제로 패딩이라고 부르는데요
  • 5:42 - 5:44
    이미지 경계에 0 값을
    이렇게 추가하는 방법입니다
  • 5:44 - 5:46
    이미지 경계에 0 값을
    이렇게 추가하는 방법입니다
  • 5:46 - 5:49
    이렇게 하면 특징 맵의
    출력을 바꿀 수 있는데요
  • 5:49 - 5:50
    예를 들어
  • 5:50 - 5:53
    같은 2 x 2 필터로
  • 5:53 - 5:55
    이미지의 이 부분을 봅니다
  • 5:55 - 5:57
    그 다음에는 이 부분을 보구요
  • 5:57 - 6:00
    마지막에는 이 부분을 보게 보게됩니다
  • 6:00 - 6:04
    그러면 이렇게 3개의 값을 얻겠죠
  • 6:04 - 6:07
    이렇게 아래 방향으로도 3개의 값을 얻을 수 있고
  • 6:07 - 6:12
    그 결과로 3 x 3의 특징맵이 생깁니다
  • 6:12 - 6:13
    이 애니메이션은
  • 6:13 - 6:16
    어떻게 합성곱이 동작하는지를 보여줍니다
  • 6:16 - 6:18
    이 사이즈의 필터로
  • 6:18 - 6:20
    이미지 전체를 순회하고
  • 6:20 - 6:23
    각 값을 계산하여
  • 6:23 - 6:28
    특징맵을 만듭니다
  • 6:28 - 6:31
    물론 여러 사이즈의 패딩을
    고려해볼 수 있습니다
  • 6:31 - 6:33
    패딩 사이즈가 다르면
  • 6:33 - 6:37
    특징맵의 사이즈도 달라지겠죠
  • 6:37 - 6:39
    앞서 보여드린 예제에서
  • 6:39 - 6:42
    우리는 스트라이드 크기를 1로 설정했습니다
  • 6:42 - 6:43
    그래서 한번에 1칸씩 (필터를) 움직였죠
  • 6:43 - 6:45
    그래서 한번에 1칸씩 (필터를) 움직였죠
  • 6:45 - 6:47
    하지만 우리는 2칸씩 움직일 수도 있습니다
  • 6:47 - 6:49
    3칸씩 움직일 수도 있구요
  • 6:49 - 6:50
    이게 바로 스트라이드입니다
  • 6:50 - 6:52
    그럼 깊이가 있는 이미지는 어떨까요?
  • 6:52 - 6:54
    RGB 컬러 이미지를 예를 들면
  • 6:54 - 6:56
    깊이는 3이 됩니다
  • 6:56 - 6:58
    그렇다고 해도 기본 아이디어는 같습니다
  • 6:58 - 7:00
    유일한 차이는
  • 7:00 - 7:02
    같은 깊이의 필터를 사용한다는 것입니다
  • 7:02 - 7:05
    필터를 사용해서
  • 7:05 - 7:07
    우리는 이미지의 작은 부분만을 보게 되고
  • 7:07 - 7:10
    내적 연산을 계산합니다
  • 7:10 - 7:14
    여기서는 몇 번의 연산이 더 필요한데요
  • 7:14 - 7:16
    5 x 5 대신
  • 7:16 - 7:20
    5 x 5 x 3
    그래서 75차원 내적 연산이 됩니다
  • 7:20 - 7:25
    이 숫자 하나를 계산하기 위해
    종종 편향을 추가하기도 합니다
  • 7:25 - 7:26
    이 방법을 적용해서
  • 7:26 - 7:29
    이 숫자를 얻어냅니다
  • 7:29 - 7:31
    여기 32 x 32 사이즈의 이미지가 있고
  • 7:31 - 7:33
    5 x 5 사이즈의 필터가 있을 때
  • 7:33 - 7:35
    어떤 값이 출력될지 생각해봅시다
  • 7:35 - 7:37
    여기서 시작을 하면
    스트라이드가 1이니까
  • 7:37 - 7:39
    한 번에 1칸씩 이동합니다
  • 7:39 - 7:41
    이렇게 몇 칸을 갈 수 있을지를 보면
  • 7:41 - 7:45
    바로 28칸입니다
    여기서도 마찬가지로
  • 7:45 - 7:48
    1칸씩 총 몇 칸을 내려갈 수 있을지를 보면
  • 7:48 - 7:49
    여기서도 28칸입니다
  • 7:49 - 7:54
    이것이 활성맵 사이즈의 출력입니다
  • 7:54 - 7:56
    물론 여러 개의 필터를 적용할 수 있습니다
  • 7:56 - 7:59
    여기 우린 2개의 다른 필터를 갖고 있습니다
  • 7:59 - 8:01
    주로 두 필터는 다른 값을 갖습니다
  • 8:01 - 8:03
    두 필터는 다른 활성맵을 생성하구요
  • 8:03 - 8:06
    아주 많은 필터를 사용할 수도 있습니다
  • 8:06 - 8:08
    사용하는 필터의 개수가
  • 8:08 - 8:13
    생성된 활성맵의 깊이를 결정합니다
  • 8:13 - 8:16
    만약 6개의 필터를 사용한다면
  • 8:16 - 8:20
    깊이가 6인 활성맵이 생성됩니다
  • 8:20 - 8:22
    이 28이라는 값은
  • 8:22 - 8:28
    원본 이미지 사이즈와 필터의 사이즈에
    의해서 정해집니다
  • 8:28 - 8:33
    비슷한 방법으로
    우리는 여기에 또다른 합성곱 레이어를
  • 8:33 - 8:35
    적용할 수 있습니다
    10개의 필터를 사용해서 말이죠
  • 8:35 - 8:37
    10개의 필터를 사용하면
  • 8:37 - 8:41
    출력의 깊이는 10이 됩니다
  • 8:41 - 8:45
    여기서 28 x 28 이미지에
    5 x 5 필터를 사용하면
  • 8:45 - 8:47
    여기서 28 x 28 이미지에
    5 x 5 필터를 사용하면
  • 8:47 - 8:53
    24 x 24 활성맵을 생성합니다
  • 8:53 - 8:55
    각 합성곱 레이어 이후에 풀링 레이어 또는
  • 8:55 - 8:59
    서브샘플링 레잉를 사용하기도 합니다
  • 8:59 - 9:01
    이 아이디어는 합성곱 레이어에서 생성된
    정보의 양을 줄이는 것입니다
  • 9:01 - 9:02
    이 아이디어는 합성곱 레이어에서 생성된
    정보의 양을 줄이는 것입니다
  • 9:02 - 9:06
    이 아이디어는 합성곱 레이어에서 생성된
    정보의 양을 줄이는 것입니다
  • 9:06 - 9:06
    어떻게 하면 될까요?
  • 9:06 - 9:09
    이전 합성곱에서 생성된
    특징맵 또는 활성맵이 있다고 가정해 봅시다
  • 9:09 - 9:11
    이전 합성곱에서 생성된
    특징맵 또는 활성맵이 있다고 가정해 봅시다
  • 9:11 - 9:14
    이전 합성곱에서 생성된
    특징맵 또는 활성맵이 있다고 가정해 봅시다
  • 9:14 - 9:17
    이 때, 앞서 설명한 필터 아이디를 사용할 것입니다
  • 9:17 - 9:19
    필터 사이즈는 2 x 2로 하여
  • 9:19 - 9:20
    이미지를 한번에 2 x 2 씩 볼 것입니다
  • 9:20 - 9:24
    이미지를 한번에 2 x 2 씩 볼 것입니다
  • 9:24 - 9:26
    이 때 맥스 풀링이 아주 널리 쓰입니다
  • 9:26 - 9:29
    이 패치에서
  • 9:29 - 9:31
    최댓값을 선택합니다
    여기서는 6이네요
  • 9:31 - 9:35
    이 값을 복사해서
  • 9:35 - 9:37
    출력값으로 사용합니다
  • 9:37 - 9:39
    그리고 이 윈도우를 여기로 이동할텐데
  • 9:39 - 9:41
    얼마나 이동시킬 것인가는
  • 9:41 - 9:43
    스트라이드를 보면됩니다
    2네요
  • 9:43 - 9:48
    그럼 윈도우를 2칸을 이동시켜서
  • 9:48 - 9:49
    그리고 최댓값을 찾아
  • 9:49 - 9:52
    이 값을 출력값으로 사용합니다
  • 9:52 - 9:55
    이것이 최댓값이고
    이것이 최댓값이네요
  • 9:55 - 9:58
    맥스 풀링을 하면
  • 9:58 - 10:03
    이 출력이 생성됩니다
  • 10:03 - 10:04
    이 애니메이션은
  • 10:04 - 10:08
    맥스 풀링이 동작하는 원리를 보여줍니다
  • 10:08 - 10:12
    이 지역에서 최댓값을 선택하여
  • 10:12 - 10:15
    출력값으로 사용합니다
  • 10:15 - 10:18
    또한 평균 풀링같은 다른 연산 방법도 있습니다
  • 10:18 - 10:25
    이는 패치에서 평균값을 계산하는 방법입니다
  • 10:25 - 10:27
    우리는 CNN에서 합성곱이
    어떻게 동작하는지를 알아보았습니다
  • 10:27 - 10:29
    서브샘플링이 무엇인지도 알아보았고
  • 10:29 - 10:32
    이것은 이전 강의에서 다룬
    Softmax classifier와 똑같습니다
  • 10:32 - 10:33
    이것은 이전 강의에서 다룬
    Softmax classifier와 똑같습니다
  • 10:33 - 10:35
    완전 연결 신경망과
    지역 연결 신경망인 CNN의 차이는 무엇일까요?
  • 10:35 - 10:37
    완전 연결 신경망과
    지역 연결 신경망인 CNN의 차이는 무엇일까요?
  • 10:37 - 10:41
    완전 연결 신경망과
    지역 연결 신경망인 CNN의 차이는 무엇일까요?
  • 10:41 - 10:42
    완전 연결 신경망은
  • 10:42 - 10:45
    주어진 이미지에서
  • 10:45 - 10:47
    모든 정보를 읽어
  • 10:47 - 10:49
    입력으로 사용합니다
  • 10:49 - 10:51
    반면 CNN에서는
  • 10:51 - 10:58
    작은 사이즈의 필터들을 사용하며
    모든 웨이트는 공유됩니다
  • 10:58 - 11:00
    이 작은 사이즈의 필터로
  • 11:00 - 11:01
    이미지 전체를 순회합니다
  • 11:01 - 11:03
    그 결과로
    (지역 연결 신경망은)
  • 11:03 - 11:06
    더 나은 웨이트를 갖게되고
  • 11:06 - 11:09
    이미지를 다루는데 더 유동적입니다
  • 11:09 - 11:11
    이를 직접 구현해 봅시다
  • 11:11 - 11:14
    이 예제에서는
    MNIST 데이터셋을 사용할 것입니다
  • 11:14 - 11:17
    두 합성곱 레이어과
  • 11:17 - 11:19
    하나의 완전 연결 레이어을 활용해 보겠습니다
  • 11:19 - 11:21
    합성곱 레이어에서는
  • 11:21 - 11:26
    Conv2d라는 API를 사용합니다
  • 11:26 - 11:33
    이 함수는 입력값으로 in_channels
    out_channels, kernal_size를 받습니다
  • 11:33 - 11:34
    여기 예제에서는
  • 11:34 - 11:37
    이미지 색상을 하나만 사용하므로
  • 11:37 - 11:39
    in_channels 사이즈는 1이고
  • 11:39 - 11:43
    out_channels는 여러분이 원하는
    출력 개수만큼 정할 수 있습니다
  • 11:43 - 11:44
    여기서는 10개의 출력을
  • 11:44 - 11:46
    생성하고 싶다고 칩시다
  • 11:46 - 11:49
    커널(필터) 사이즈는 앞과 마찬가지로
  • 11:49 - 11:52
    5 x 5로 설정할 수 있습니다
  • 11:52 - 11:54
    맥스 풀링은 더 간단합니다
  • 11:54 - 11:58
    한 번에 어느 사이즈로 볼 것인지
    커널 사이즈만 정해주면 됩니다
  • 11:58 - 12:01
    한 번에 어느 사이즈로 볼 것인지
    커널 사이즈만 정해주면 됩니다
  • 12:01 - 12:04
    이것은 어떻게 구현할까요?
  • 12:04 - 12:06
    이것은 Softmax classifier와 완전 동일합니다
  • 12:06 - 12:09
    하나의 Linear만 사용합니다
  • 12:09 - 12:11
    구현 방법을 알아봅시다
  • 12:11 - 12:14
    우선 클래스를 생성하고
  • 12:14 - 12:17
    생성자에서는 필요한 요소들을 정의합니다
  • 12:17 - 12:18
    예를 들어
  • 12:18 - 12:22
    여기 Conv2d에서는 in_channels로 1
  • 12:22 - 12:26
    out_channels로 10로
    커널 사이즈는 5로 설정하였습니다
  • 12:26 - 12:28
    두 번째로, 앞에서 10개의 출력을 생성했기 때문에
  • 12:28 - 12:30
    여기서는 in_channels로 10을 설정합니다
  • 12:30 - 12:34
    그러니까 이 두 값은 반드시 같아야 합니다
  • 12:34 - 12:38
    20개의 out_channels을 만들 예정이고
  • 12:38 - 12:40
    커널 사이즈는 5로 설정하겠습니다
  • 12:40 - 12:43
    그리고 맥스 풀링을 정의하고
  • 12:43 - 12:45
    완전 연결 레이어를 정의합니다
  • 12:45 - 12:47
    forward 함수에서는 이 모든 것들을 연결합니다
  • 12:47 - 12:51
    x를 입력받아 합성곱 레이어를 거치고
  • 12:51 - 12:53
    맥스 풀링을 거쳐서 reLU에 넘깁니다
  • 12:53 - 12:55
    그리고 이 출력 x는 두 번째 레이어에서
  • 12:55 - 12:58
    다시 입력으로 사용되는 방식입니다
  • 12:58 - 12:59
    여기 20채널의 활성맵이 있습니다
  • 12:59 - 13:03
    여기 20채널의 활성맵이 있습니다
  • 13:03 - 13:07
    이를 flatten하여
    선형에 맞게 변형하고 싶은데요
  • 13:07 - 13:10
    텐서를 단순하게 flatten하는 방법으로
  • 13:10 - 13:12
    여기서 view를 사용했습니다
  • 13:12 - 13:16
    이 입력 사이즈(in_size)를 flatten텐데
  • 13:16 - 13:19
    이것은 N 배치 사이즈가 됩니다
  • 13:19 - 13:22
    나머지는 자동으로 계산됩니다
  • 13:22 - 13:23
    이렇게 flatten 한것을
  • 13:23 - 13:27
    여기 완전 연결 레이어로 넘기면
  • 13:27 - 13:29
    최종 출력값이 생성되고
  • 13:29 - 13:30
    이것을 여기로
  • 13:30 - 13:35
    log_softmax로 넘깁니다
  • 13:35 - 13:39
    그러면 여기 들어가야 할 값은 무엇일까요?
  • 13:39 - 13:42
    이 모든 합성곱 과정을 거치고 나면
  • 13:42 - 13:44
    우리가 얻을 수 있는 사이즈는 무엇일까요?
  • 13:44 - 13:48
    이것은 중요한 질문입니다
  • 13:48 - 13:52
    주어진 이미지의 사이즈와 필터의 사이즈를 통해
  • 13:52 - 13:54
    하나씩 계산할 수는 있지만
  • 13:54 - 13:56
    확실하지 않다면
  • 13:56 - 13:58
    그냥 임의의 수를 사용하면 됩니다
  • 13:58 - 14:00
    그리고 그냥 프로그램을 실행하면
  • 14:00 - 14:03
    PyTorch는 에러를 발생합니다
  • 14:03 - 14:09
    에러는 64 x 320 사이즈의 행렬을
  • 14:09 - 14:11
    100 x 10 사이즈의 행렬과 곱하려고 하였으므로
  • 14:11 - 14:15
    미스매치가 발생했다는 내용입니다
  • 14:15 - 14:16
    flattening 이후에
  • 14:16 - 14:19
    우리가 얻은 값은 이것입니다
  • 14:19 - 14:22
    이 64는 배치사이즈 N이라 보면 되겠고
  • 14:22 - 14:27
    이것은 우리의 flatten 벡터
    텐서 사이즈인 320입니다
  • 14:27 - 14:30
    그러면 여기 들어갈 알맞은 값은 무엇일까요?
  • 14:30 - 14:34
    이 두 숫자는 같아야 합니다
  • 14:34 - 14:40
    그러므로 여기 적절한 숫자는 320입니다
  • 14:40 - 14:42
    우리가 실제로 계산해 볼 필요없이
  • 14:42 - 14:44
    그냥 아무 숫자를 넣고 실행해보면
  • 14:44 - 14:46
    적절한 숫자를 찾을 수 있습니다
  • 14:46 - 14:49
    만약 텐서 사이즈를 알고 싶다면
  • 14:49 - 14:52
    여기서 그냥 x.size()를 출력해보면 됩니다
  • 14:52 - 14:55
    그러면 텐서 사이즈를 알 수 있습니다
  • 14:55 - 14:58
    이렇게 하면 모든 문제가 해결됩니다
  • 14:58 - 15:00
    나머지 부분도 동일합니다
  • 15:00 - 15:02
    우리가 Softmax classifer에서
    트레이닝 한 방법과 동일합니다
  • 15:02 - 15:03
    우리가 Softmax classifer에서
    트레이닝 한 방법과 동일합니다
  • 15:03 - 15:05
    그러면 이 결과를 얻을 수 있습니다
  • 15:05 - 15:08
    forward를 실행 하고 손실을 계산합니다
  • 15:08 - 15:10
    그리고 backword를 하고 update하면 됩니다
  • 15:10 - 15:15
    Epoch가 실행될 때마다 손실값은 작아집니다
  • 15:15 - 15:18
    그러면 98%의 정확도가 나오네요
  • 15:18 - 15:20
    앞 강의에서는 90%였는데
  • 15:20 - 15:22
    CNN을 이용하니 98%가 나오네요
  • 15:22 - 15:25
    훨씬 나은 결과입니다
  • 15:25 - 15:27
    이제 우리는 CNN을 이해하였으므로
  • 15:27 - 15:29
    더 많은 레이어를 연결할 수 있습니다
  • 15:29 - 15:32
    3개, 4개 이상으로요
  • 15:32 - 15:36
    완전 연결 레이어를 위해
    많은 레이어를 사용할 수도 있습니다
  • 15:36 - 15:39
    연습문제로 이렇게 보다 깊은
    네트워크를 구성해 볼 수 있습니다
  • 15:39 - 15:40
    연습문제로 이렇게 보다 깊은
    네트워크를 구성해 볼 수 있습니다
  • 15:40 - 15:44
    또한 각 커널마다 다른 사이즈를 설정해보고
  • 15:44 - 15:47
    어떤 것이 더 잘 동작하는지
    알아볼 수도 있습니다
  • 15:47 - 15:48
    다음 강의에서는
  • 15:48 - 15:51
    더 흥미로운 심화된 CNN 구조를
    알아보도록 하겠습니다
  • 15:51 - 15:52
    더 흥미로운 심화된 CNN 구조를
    알아보도록 하겠습니다
Title:
PyTorch Lecture 10: Basic CNN
Description:

more » « less
Video Language:
English
Duration:
15:52

Korean subtitles

Incomplete

Revisions