신경망(CNN) 정리 final!

김찬울·2021년 9월 14일
0

퍼셉트론과 신경망

퍼셉트론

퍼셉트론은 간단하게 보면 하나의 식이다.

y = ax + b라는 하나의 식으로 존재한다.

신경망

신경망은 이런 퍼셉트론이 서로 연결된층의 퍼셉트론이라고 보면 된다.

신경망은 말 이름 그대로 사람의 뉴럴을 본따와서 각 역할에 맞는 신호를 받는 신경을 컴퓨팅적으로 구현한 것이다.

또한 0과 1로만 존재하는 계단 함수가 아닌 조금 더 자연스러운 학습을 위해 기존의 활성화 함수인 계단 함수를 넓게 퍼지게 하는 시그모이드 함수를 쓴 것이 신경망의 시작이었다.

층이 깊어 질 수록 복잡한 문제 해결 가능 (xor문제 해결)

현재까지의 결과

MNIST: DENSE(fully connercted, affine) layer로 훈련

학습:수치미분 (느림), 오차역전파법(빠름)

optimizer(SGD, AdaGrad, Momentum, Adam)
Overfitting -> 가중치 감소(L1, L2) Drop Out, Global Average Pooling(<--Flatten)
-> 데이터 증강 (ImageGenerator -- 뒤집기, 회전, 색변경등) : generator, flow(원본) -> model.fit

keras의 유용한 기능

유용한 기능을 소개한다!

glob

import glob

glob.glob('파일 위치/*.jpg')

이런 식으로 우리는 해당 파일에 있는 모든 jpg를 긁어 올 수 있다.
*가 컴퓨팅에서는 어떠한 문자 또는 문자열을 뜻하기 때문이다.(그렇기에 모든 jpg를 가져올 수 있다.)

하지만 glob.glob는 파일 경로를 가져오는 것이므로

이를 따로 받아와야한다.

ImageDataGenerator

IMAGE_SIZE = 224
BATCH_SIZE = 32
train_generator = ImageDataGenerator(horizontal_flip = True, rescale=1/255.0) #Scale 조정 scale을 재조정하는데 255.0으로 나눌 것이다.
train_generator_iterator = train_generator.flow_from_dataframe(dataframe=train_df, x_col='path',
                                                               y_col='label',
                                                               target_size=(IMAGE_SIZE, IMAGE_SIZE), batch_size=BATCH_SIZE,
                                                               class_mode='binary') #binary label Encoding

어제 설명한 ImageDataGenerator이다.

더욱 간단히 설명하자면

데이터를 배치 사이즈로 묶어 iterator형태로 만들어서 next로 받아오는 것은 배치사이즈크기의 데이터다.

이를 사용하는 이유는 데이터를 증강하기 위함이면서 동시에 전처리 역할이다.
해당 데이터가 categorical로 변형하지 않아도 되기에 df를 그대로 사용했다.

directory형 입력데이터와 dataFrame 입력데이터

현재 코드에서 .flow~~~부분을 보면 flow_from_dataframe으로 되어있다.

이와 마찬가지로 flow_from_directory도 있는데
이런 식으로 굳이 우리가 data를 안 불러와도 glob.glob로 받아온 디렉토리
또는

train_df = pd.DataFrame({'path':train_paths, 'label':train_labels})

해당 코드처럼 주소와 label데이터를 가진 df를 이용하여 데이터 전처리와 증강을 할 수 있다.

profile
코린코린이

0개의 댓글