본문 바로가기

딥러닝 수학25

35. [CNN기초] 원, 네모를 구별하는 CNN 만들기(이론) 1. 문제제기 아래 예시와 같이 원과 네모를 구별하는 문제가 있다. 3살짜리 아이도 맞출 만큼 굉장히 쉬운 문제다. 실전을 들어가 보자. 3 × 3 크기의 합성곱 필터 1개를 이용하여 합성곱 → relu → 2 × 2 필터 Max pooling → 분류기 fc → sigmoid를 이용하여 원과 네모를 분류할 수 있을까? 데이터를 구해보자. 본인은 데이터를 구할 때 kaggle을 열심히 이용한다. 아래와 같이 용량도 적절한 데이터를 찾았다. CC0:Public Domain 라이센스도 맘에 든다. 149.2kB인 착한 용량도 마음에 든다. 이 데이터는 원(Circle) 100장, 네모(Square) 100장, 삼각형(Triangle) 100장으로 구성된 28 × 28 데이터인데, 필터 1개만 이용할 것이므로.. 2023. 1. 28.
33. [CNN기초] 이미지의 합성곱 훈련 -쉬운예제(실습)- 저번시간에 아래와 같이 3 × 3 이미지를 2 × 2 값으로 어떻게 훈련할 수 있는지 이야기하였다. 오늘은 이 내용을 코드로 작성해 보고자 한다. 예상하건데 필터는 1개이고, 선형분류기가 따로 없으므로 훈련 성과는 그리 좋을 것 같지 않다. 먼저 입력 Input과 목표 Target을 설정해 보자. numpy의 flipud와 fliplr을 이용하여 생성하면 편하다. import numpy as np import matplotlib.pyplot as plt x_sorce1 = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]]) x_sorce2 = np.flipud(x_sorce1) # sorce1의 좌우반전 x_sorce3 = np.fliplr(x_.. 2023. 1. 21.
32. [CNN기초] 이미지의 합성곱 훈련 -쉬운예제(이론)- 저번시간엔 image to column 이란 무엇인지, im2col 을 이용해 어떻게 이미지를 합성곱 할 수 있는지, 역전파는 어떻게 하는지 알아보았다. 이번 시간에는 정말 쉬운 예제로 간단한 이미지를 합성곱을 이용해 어떻게 훈련할 수 있는지 알아보고자 한다. 이론시간을 갖는 이유는, 무작정 컴퓨터 앞에 앉아 코딩하는 것은 정말로 멍청하고 비효율적이기 때문이다. 노트를 이용하여 내용을 손을 한번 전개하면서 의사코드(psudo code)를 작성하는 과정이 정말정말 필요하다. (그리고 이러한 노트 정리는 아이패드가 짱이다. ㅡㅡ) 1. 문제제기 아래와 같이 Input인 3×3 이미지 4장이 있다. 어느 쪽 모서리가 밝은지 주목하자. 이를 Target인 2×2 이미지로 훈련할 수 있을까? 간단하게 생각해서, .. 2023. 1. 20.
29. [CNN기초] 1차원 배열 CNN 훈련하기-3(패딩,선형연산) 이전 28번 구현에서 3개의 배치가 있는 경우 훈련 결과가 상당히 좋지 않았다. 노란색 부분이 1, 그 외에는 0이 되어야 하는데 완벽하지가 않다. 무엇이 문제이고 어떻게 해결할 수 있을까? 여러 가지 방법이 있으며 하나씩 살펴보기로 하자. 1. 패딩 구현하기 첫 번째 이유로 합성곱 시 입력 데이터를 균등하게 사용하지 않을 수 있기 때문이다. 아래 그림을 살펴보자. 합성곱 과정을 살펴보면 양 끝단 자료일 수록 합성곱 횟수가 감소한다. 이에 정확한 특성맵을 작성하기 힘들 수 있다. 이를 해결하기 위해 패딩(Padding)을 사용해 볼 수 있다. 패딩은 입력 데이터 주변에 특정 값으로 채우는 것을 의미한다. 우리는 모든 입력 요소가 균등하게 연산되게 하고 싶으므로 양 끝단을 각각 2개의 0의 요소로 채우는 .. 2023. 1. 5.