본문 바로가기

인공지능23

데이타 사이즈 흐름 추적해보기 batch = 100 즉, 위 그림에서 손글씨 2와 같은 것들이 100개 동시 입력한다는 의미. 손글씨 하나 크기는 (28x28) filter는 30개로 하고, 각 필터 크기는 (5x5) pad=0, stride=1로 셋팅. affine의 은닉층 노드수는 120. 출력층 노드수는 10개로 했음. pooling은 2x2, stride = 2로 했음 * 첫번째 conv 출력 크기는 (100, 30, 24, 24) pad를 0으로 했기 때문에 28x28에서 24x24로 크기가 줄었음. pad 0으로 하면 크기가 반드시 줄어야 함. 필터 갯수가 30개이므로 100x30x24x24가 된 것임. * 두번째 ReLU 출력 크기는 (100, 30, 24, 24) ReLU는 그냥 투명한 존재처럼 생각하면 됨. * 세번째.. 2021. 8. 23.
훈련시킨 후 테스트 해보기 테스트 한 후에 아무 입력이나 넣어봤는데, 계속 에러. 왜 그런가 했더니 network 클래스에서 받는 배렬의 차원이 안맞았음. 그래서 요 예제에 한해서 반드시 저렇게 reshape를 해서 4차원으로 만들어줘야 함. 4차원이라고 해서 4차원에 뭔가 꽉찬 데이타는 아님. 그냥 28x28 픽셀 데이타인데, 그걸 형식만 4차원으로 하라는 뜻임. 따라서, arr[1]은 당연히 없음. 2021. 8. 22.
인공지능 '층' 용어정리 인공지능을 위 그림처럼 표현하는데, 같은 그림을 두고 2층이다, 아니다 3층이다 라고 다르게 부름. 혼란! 입력층은 딱 하나님. 출력층도 딱 하나님. 하지만, 은닉층은 여러개일 수 있음. 위 그림에선 하나. 입력층도 '층'이라고 부르기 때문에 저 그림을 가리켜 '3층 인공지능'이라 부르기도 함. 하지만, 지금 공부하는 책에선 동그라미 층보다는 줄들이 있는 부분만 층으로 여김. 입력층은 당연히 줄이 없으니까, 고려하지 않음. 그래서 저걸 2층 인공지능이라 부름. 내 생각에도 이게 속편함. 2층이면 W가 2개. 3층이면 3개. 머리속으로 그리기가 쉬움. 그래서, 아래 그림은 3층 신경회로망. 거미줄층이 3개임 2021. 8. 20.
CNN 코드 분석 1 앞서 보았던 코드를 하나하나 분석해 보자. 먼저 손글씨 데이타를 읽어 들이는 부분. from deep.dataset.mnist import load_mnist def img_show(img): pil_img = Image.fromarray(np.uint8(img)) pil_img.show() # 데이터 읽기 (x_train, t_train), (x_test, t_test) = load_mnist(flatten=False, normalize=False) # 데이타 확인 img = x_train[10] # pixel 값을 0 ~1 로 정규화. Flasesms 0~255. 실제 화면으로 보려면 이걸 택해야 함. * flatten = True -> 1차원배열로 정리. False -> 1x28x28 3차원 배열로.. 2021. 8. 17.
7.5 CNN 구현하기 (코드 짜기) 먼저 데이타를 읽어보자. 앞에서도 말했지만, 우리가 인공지능 학습용으로 선택한 데이타는 아래의 손글씨 집합이다. from deep.dataset.mnist import load_mnist # deep/dataset/ 디렉토리 아래, mnist.py 화일이 있고, 그 화일안에 load_mnist 함수가 있으며, 그 디렉토리에 위 손글씨 집합 데이타가 있다. # 데이터 읽기 (x_train, t_train), (x_test, t_test) = load_mnist(flatten=False) x_train은 훈련용으로 선택한 손글씨 데이타 t_train은 손글씨에 대한 정답 데이타 x_test은 인공지능 시험용으로 선택한 손글씨 데이타 x_test은 인공지능 시험용에 사용할 정답 데이타 각 x_train, t_.. 2021. 8. 14.
7.5 CNN 구현하기 요렇게 생긴 인공지능을 구현할 것이다. 전체 코드는, # coding: utf-8 import sys, os sys.path.append(os.pardir) # 부모 디렉터리의 파일을 가져올 수 있도록 설정 import numpy as np import matplotlib.pyplot as plt from dataset.mnist import load_mnist from simple_convnet import SimpleConvNet from common.trainer import Trainer # 데이터 읽기 (x_train, t_train), (x_test, t_test) = load_mnist(flatten=False) # 시간이 오래 걸릴 경우 데이터를 줄인다. #x_train, t_train =.. 2021. 8. 13.
7.4.4 풀링 계층 구현하기 풀링은 입력데이타 크기를 줄이는 과정이라고 배웠다. 실제로는 아래 그림처럼 함. 입력데이타 세개의 채널을 편 후, 각 행에서 최대값을 구한후 다시 쬐끄만 출력으로 만듦. 이게 끝! 코드도 너무 simple! 위 코드엔 def backward(self, x):가 빠져있음. 이제 드디어 로 들어감. 앞에서 배운 것들을 조합하면 됨. CNN만 배우면 이미지 보고 판단하는 일을 컴퓨터에 시킬 수 있음. 2021. 8. 12.
인공지능 개념 파악하기 - 2/2 먼저 데이타 set를 준비해야 함. 데이타가 없으면 인공지능은 아무 쓸모가 없음. 위 그림과 같은 손글씨가 있다고 가정. (실제 인공지능 연습할 때 사용하는 손글씨 갯수는 6만개임) 그리고, 인공지능 모델을 만듬. 요런 식으로 만듬. 그 다음엔 그냥 기계적으로 하면 됨. 1. 학습시킬 데이타 크기를 정함. 예를 들어 D 2. 학습할 횟수를 정함. S 3. 인공지능 연습용 손글씨에서 무작위로 글자 하나를 뽑음. 4. 그걸 입력에 넣음. 그리고 출력을 빼냄. 5. 출력값과 실제 정답을 비교해서 '손실함수'를 계산함. 6. 이 손실함수에 대하여 가중치 및 바이어스를 독립변수로 해서 기울기 구함. 7. 기울기를 구했으면 새로운 가중치와 바이어스를 구함. 8. 이 새로운 값을 사용해서 3번부터 다시 7번까지 함... 2021. 8. 7.
인공지능 개념 파악하기-1/2 인공지능이 무엇인지 개념 파악하기 위한 초간단 설명임. 전구가 4개 있다고 가정하자. 위 그림처럼 전구에 빨간 불이 랜덤하게 켜질 수 있는데, 빨간 불이 켜지는 상황에 따라 아래에 있는 전구 2개에도 파란 불이 켜지는 장치를 만들고자 한다. 규칙은, 빨간 불이 위쪽에 많이 켜지면, 파란불이 위쪽에. 그 반대이면 파란불도 그 반대쪽에 켜지는 규칙을 만족하는 장치라고 하자. 이런 장치를 만드는 건 사실 어렵지 않다. 하지만 어렵다고 가정하자. 그래야 이야기할 맛이 나잖아. 이 어려운 문제를 풀기 위해서 옛날에 어떤 과학자가 아래와 같은 장치를 고안했다. 오? 이게 뭐야? 어디서 많이 본 것 같다. 그렇다. 우리 몸에서 신경자극이 흘러가는 모양과 비슷하다. 우리 머리를 열어보면 저렇게 되어 있다. 그래서, 지.. 2021. 8. 6.
7.4.3 합성곱 계층 구현하기 이제 본격적으로 코딩해 가면서 공부해 보기. 먼저 im2col 함수가 어떻게 동작하는 지 알아봄. 어떤 함수이든지 실제로 이것저것 대입해보며 동작하는 실제 모습을 봐야 내 것이 됨. im2col 함수에 대해 이렇게 되어 있음 (*im2col 함수 실제 내부 코드 보면 몇 줄 안됨) 꼭 기억해야 할 점은 (1) 입력데이타는 4차원이어야 한다는 거, 반드시!!!! (2) 필터 높이, 필터 너비 등 필터 관련 정보를 인수로 넣게 되어 있는데 im2col 함수는 필터와 전혀 관계가 없음. 여기서 말하는 필터는 im2col 함수가 2차원 배열을 출력했을 때, 그 배열에 가해지는 필터에 대한 정보임. 즉, 나중에 할 필터 연산에 맞춰서 2차원 배열을 im2col이 출력하도록 위한 정보를 미리 im2col 인수에 넣.. 2021. 8. 4.