본문 바로가기

파이썬 프로그래밍59

36. [CNN기초] 원, 네모를 구별하는 CNN 만들기(실습) 저번시간에 합성곱으로 원과 네모를 구별하는 CNN을 어떻게 구성하고, 학습할 수 있는지 그림과 함께 알아보았다. 이번 시간에는 직접 코드를 작성해 보면서 가능한지 알아보자. 1. 준비하기 1) CNN 구성 Input → Conv2D → relu → Max Pooling → flatten → fc → sigmoid 2) 이미지 준비하기 아래의 파일을 다운받아 적절한 곳에 풀자. 28 × 28 이미지 train : 원 12개, 네모 12개 test : 원 2개, 네모 2개 3) train data 학습데이터를 불러오고 이미지를 출력해 보자. 이미지를 불러와서 Numpy 배열에 넣자. 주의할 점은 2가지가 있는데 (1) 흰색 바탕에 검은색 그림 → 반전(bitwise_not) 시켜 검은색 바탕에 흰색 그림으로.. 2023. 2. 1.
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.
34. [CNN기초] Max pooling, Average pooling 구현 Pooling을 정말 간단하게 이야기하자면 이미지의 있는 특징들을 요약하는 작업이다. 사용하는 이유는 일반적으로 특성 맵의 차원을 줄임으로써 연산량을 줄여줄 수 있을 뿐만 아니라 특징을 요약했기 때문에 입력 이미지 특징들의 위치 변화(회전, 대칭이동 등)에 잘 반응한다. Pooling은 최대 풀링(Max pooling)과 평균 풀링(Average pooling) 두 가지가 있는데 각각 장단이 있다. 오늘은 풀링을 넘파이로 어떻게 구현하는지 알아보고 다음시간에 풀링층을 적용하여 문제를 해결해 보자. 아래의 1개의 이미지(batch size, height, width)를 풀링해 보자. # 풀링 레이어 구현 Average Pooling과 Max Pooling을 구현해 보자. import numpy as np .. 2023. 1. 26.
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.