[딥러닝 Express] Chapter 07. MLP와 케라스 라이브러리 - (3)

배규리·2024년 1월 23일

AI 기초

목록 보기
16/32
post-thumbnail

이전 시간에 Keras를 이용해서 MNIST의 숫자 필기체 이미지의 숫자를 판별하는 모델을 만들어보았다.
이제 케라스에 대해서 조금 더 상세하게 살펴보자.
그치만 아래의 내용들은 개념적인 부분이기 때문에 한 번 스윽 훑어보는 정도로 😊


7. 케라스의 입력 데이터

케라스 모델의 입력 데이터 유형

  • 넘파이 배열
  • Tensorflow Dataset
  • 파이썬 제너레이터

텐서: 다차원 넘파이 배열

  • 2차원 배열: 행렬(matrix)
  • 3차원 이상의 배열: 텐서

텐서의 속성

  • 텐서의 차원(축의 개수): 랭크(rank)라고도 한다. 3차원 텐서에는 3개의 축이 있다. ndim 속성으로 알 수 있다.
  • 형상(shape): 형상의 각 축으로 얼마나 데이터가 있는지를 파이썬의 튜플로 나타낸 것이다.
  • 데이터 타입(data type): 텐서 요소의 자료형. dtype 속성으로 알 수 있다.

8. 케라스의 클래스들

우선 케라스로 신경망 구축 시에 필요한 요소들이 존재한다.
당연한 것이긴 하지만 하나하나 상세하게 알아보자!

  1. 모델: 하나의 신경망을 나타낸다.
  2. 레이어: 신경망에서 하나의 층이다.
  3. 입력 데이터: TensorFlow 텐서 형식이다.
  4. 손실함수: 신경망의 출력과 정답 레이블 간의 차이를 측정하는 함수이다.
  5. 옵티마이저: 학습을 수행하는 최적화 알고리즘이다. 학습률과 모멘텀을 동적으로 변경한다.

1. Sequential 모델

보유한 메서드

  • compile(optimizer, loss=None, metrics=None): 훈련을 위해 모델을 구성하는 메서드⭐
  • fit(x=None, y=None, batch_size=None, epochs=1): 훈련 메서드⭐
    • x: 훈련 샘플을 저장하는 2차원 넘파이 배열
    • y: 정답 레이블을 저장하는 1차원 넘파이 배열
    • batch_size: 가중치를 업데이트할 때 처리하는 샘플의 수
    • epochs: x와 y데이터 세트를 몇 번 반복하느냐
  • evaluate(): 테스트 모드에서 모델의 손실함수 값과 측정 항목 값을 반환
  • predict(x, batch_size = None): 입력 샘플에 대한 예측값 생성
  • add(layer): 레이어 추가

2. 레이어(Layer)

Sequential 모델에 add()호출시에 들어갈 객체이다.
주로 사용되는 것은 아래와 같다. (그러나 종류 사실 엄첨 많음)

  • Input(shape, batch_size, name): 입력을 받아서 케라스 텐서를 생성하는 객체
  • Dense(units, activation=None, use_bias=True, input_shape): 유닛들이 전부 연결된 레이어
    • units: 유닛 개수
    • activation: 유닛의 활성화 함수
    • input_shape: Dense 레이어가 직접 입력을 받을 수도 있다.
    • use_bias: 유닛에서 바이어스 사용 유무
  • Embedding(input_dim, output_dim): 자연어 처리의 첫 단계에서 사용되는 레이어

3. 손실 함수(Loss Function)

손실함수는 객체로 지정할 수도 있고 문자열로 지정할 수도 있다.
만약 손실 함수에 어떤 파라미터값을 지정해주고자 하는 경우 객체 생성을 사용하면 된다.
손실함수는 대표적으로 4가지만 알아본다.

  • MeanSquearedError: 정답 레이블과 예측값 사이의 평균 제곱 오차
    • 문자열 선언: mean_squared_error 또는 mse
  • BinaryCrossEntropy: 정답 레이블과 예측 레이블 간의 교차 엔트로피 손실 계산
    • 문자열 선언: binary_crossentropy
    • 레이블 부류가 2개인 경우
  • CategoricalCrossentropy: 정답 레이블과 예측 레이블 간의 교차 엔트로피 손실 계산
    • 문자열 선언: categorical_crossentropy
    • 여러 개의 레이블 부류가 존재하는 경우
    • 정답 레이블을 원-핫 인코딩으로 제공
  • SparseCategoricalCrossentropy: 정답 레이블과 예측 레이블 간의 교차 엔트로피 ㅅ노실 계산
    • 문자열 선언: sparse_categorical_crossentropy
    • 여러 개의 레이블 부류가 존재하는 경우
    • 정답 레이블을 정수로 제공

4. 옵티마이저(Optimizer)

  • SGD: 확률적 경사 하강법
  • Adagrad: 가변 학습률을 사용하는 방법으로 SGD방법을 진보된 버전
  • Adadelta: 모멘텀을 이용하여 감소하는 학습률 문제를 처리하는 Adagrad의 변형
  • RMSprop: Adagrad의 수정판
  • Adam: RMSprop + 모멘텀 ⭐

5. 활성화 함수

  • sigmoid
  • relu
  • softmax
  • tanh
  • selu
  • softplus

9. 하이퍼 매개변수

하이퍼 매개변수의 종류

  • 학습률(Learning-rate)
    • 적응적 학습률이 좋다.
  • 모멘텀(Momentum)
    • 학습 도중에 진동을 방지
    • 0.5~0.9 사이의 값이 일반적
  • 은닉층의 개수
    • Test 셋의 오차가 더이상 개선되지 않을 때까지 레이어 수 늘리기
  • 유닛의 개수
    • 많은 것이 좋다.
  • 미니 배치의 크기
    • 일반적으로 32, 64, 128, 256, ... 으로 설정
  • Epoch 수
    • 전체 데이터셋을 반복하는 횟수
    • 검증(Test) 정확도가 감소하기 전까지 늘리기
  • ...

하이퍼 매개변수 찾는데 사용되는 방법

  • 기본값 사용
  • 수동 검색
  • 그리드 검색⭐: 격자 형태로 하이퍼 매개변수를 변경하면서 성능을 측정하는 방법
    • sklearn 패키지에서 제공해준다.
    • 하이퍼 매개변수 후보가 많으면 시간이 매우 오래걸린다.
    • 이전에 BITL 연구실에서 내가 사용했던 방법!😯
  • 랜덤 검색

드디어 Chapter 7이 마무리되었다..!🥹👏👏
뭔가 아는 내용도 있고, 새로운 내용도 있다 :)
다음은 심층 신경망!
화이팅합시다-!👍

profile
백엔드 개발은 취미인 AI 개발자🥹

0개의 댓글