open:keras-강좌

keras 강좌

데이터셋을 훈련셋, 검증셋, 시험셋으로 나눈다.

  • axon(축삭돌기): 팔처럼 몸체에서 뻗어나와 다른 뉴런의 수상돌기와 연결됩니다.
  • dendrite(수상돌기): 다른 뉴런의 축삭 돌기와 연결되며, 몸체에 나뭇가지 형태로 붙어 있습니다.
  • synapse(시냅스): 축삭돌기와 수상돌기가 연결된 지점입니다. 여기서 한 뉴려이 다른 뉴런으로 신호가 전달됩니다.

세 개의 신호를 받아 하나의 신호를 전달하는 뉴런을 레고로 표현하면 다음과 같다.

  • 녹색 블럭은 시냅스의 강도,
  • 노란색과 빨간색 블럭은 연산자,
  • 파란색 블럭은 활성화 함수를 나타냅니다.

Dense 레이어는 입력과 출력을 모두 연결해줍니다. 예를 들어 입력 뉴런이 4개, 출력 뉴런이 8개있다면 총 연결선은 32개 (4*8=32) 입니다. 각 연결선에는 가중치(weight)를 포함하고 있는데, 이 가중치가 나타내는 의미는 연결강도라고 보시면 됩니다. 현재 연결선이 32개이므로 가중치도 32개입니다.

snippet.python
Dense(8, input_dim=4, init='uniform', activation='relu')

주요 인자는 다음과 같습니다.

  • 첫번째 인자: 출력 뉴런의 수를 설정합니다.
  • input_dim: 입력 뉴런의 수를 설정합니다.
  • init: 가중치 초기화 방법을 설정합니다.
    1. 'uniform': 균일 분포
    2. 'normal': 가우시안 분포

    - activation: 활성화 함수를 설정합니다.

    1. 'linear': 기본값, 입력뉴련과 가중치로 계산된 결과값이 그대로 출력으로 나옵니다.
    2. 'relu': rectifier 함수, 은익층에 주로 쓰입니다.
    3. 'sigmoid': 시그모이드 함수, 이진 분류 문제에서 출력층에 주로 쓰입니다.
    4. 'softmax': 소프트맥스 함수, 다중 클래스 분류 문제에서 출력층에 주로 쓰입니다.

    Dense 레이어는 입력 뉴런 수에 상관없이 출력 뉴런 수를 자유롭게 설정할 수 있기 때문에 출력층으로 많이 사용됩니다. 이진 분류문제에서는 0과 1을 나타내는 출력 뉴런이 하나만 있으면 되기 때문에 아래 코드처럼 출력 뉴런이 1개이고, 입력 뉴런과 가중치를 계산한 값을 0에서 1사이로 표현할 수 있는 활성화 함수인 sigmoid 를 사용합니다.

snippet.python
Dense(1, input_dim=3, activation='sigmoid')

다중클래스 분류문제에서는 클래스 수만큼 출력 뉴런이 필요합니다. 만약 세가지 종류로 분류한다면, 아래 코드처럼 출력 뉴런이 3개이고, 입력 뉴련과 가중치를 계산한 값을 각 클래스의 확률 개념으로 표현할 수 있는 활성화 함수인 softmax 를 사용합니다.

snippet.python
Dense(3, input_dim=4, activation='softmax')

Dense 레이어는 보통 출력층 이전의 은닉층으로도 많이 쓰이고, 영상이 아닌 수치자료 입력 시에는 입력층으로도 많이 쓰입니다. 이 때 활성화 함수로 'relu'가 주로 사용됩니다. 'relu'는 학습과정에서 역전파 시에 좋은 성능이 나는 것으로 알려져 있습니다.

snippet.python
Dense(4, input_dim=6, activation='relu')
  1. 문제 정의하기
  2. 데이터 준비하기
  3. 데이터셋 생성하기
  4. 모델 구성하기
  5. 모델 학습과정 설정하기
  6. 모델 학습시키기
  7. 모델평가하기

모델을 정의했다면 모델을 손실함수와 최적화 알고리즘으로 엮어봅니다.

  • loss: 현재 가중치 세트를 평가하는 데 사용한 손실 함수 입니다. 이진 클래스 문제이므로 'binary_crossentropy'으로 지정합니다.
  • optimizer: 최적의 가중치를 검색하는 데 사용되는 최적화 알고리즘으로 효율적인 경사 하강법 알고리즘 중 하나인 'adam'을 사용합니다.
  • metrics: 평가 척도를 나타내며 분류 문제에서는 일반적으로 'accuracy'으로 지정합니다.
snippet.python
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

모델을 학습시키기 위해서 fit()함수를 사용합니다.

  • 첫번째 인자: 입력 변수입니다. 8개의 속성 값을 담고 있는 X를 입력합니다.
  • 두번째 인자: 출력 변수, 즉 라벨값입니다. 결과 값을 담고 있는 Y를 입력합니다.
  • epochs: 전체 훈련 데이터셋에 대해 학습 반복 횟수를 지정합니다.
  • batch_size: 가중치를 업데이트할 배치 크기를 의미하며, 64개로 지정했습니다.
snippet.python
model.fit(x_train, y_train, epochs=1500, batch_size=64)

케라스에서 제공되는 컨볼루션 레이어 종류에도 여러가지가 있으나 영상 처리에 주로 사용되는 Conv2D 레이어를 살펴보겠습니다. 레이어는 영상 인식에 주로 사용되며, 필터가 탑재되어 있습니다. 아래는 Conv2D 클래스 사용 예제입니다.

snippet.python
Conv2D(32, (5, 5), padding='valid', input_shape=(28, 28, 1), activation='relu')

주요 인자는 다음과 같습니다.

  • 첫번째 인자: 컨볼루션 필터의 수 입니다.
  • 두번째 인자: 컨볼루션 커널의 (행, 열) 입니다.
  • padding: 경계 처리 방법을 정의합니다.
    • 'valid': 유요한 영영만 출력이 됩니다. 따라서 출력 이미지 사이즈는 입력 사이즈보다 작습니다.
      1. 'same': 출력 이미지 사이즈가 입력 이미지 사이즈와 동일합니다.

      - input_shape: 샘플 수를 제외한 입력 형태를 정의합니다. 모델에서 첫 레이어일 때만 정의하면 됩니다.

      1. (행, 열, 채널 수)로 정의합니다. 흑백영상인 경우에는 채널이 1이고, 컬러(RGB)영상인 경우에는 채널을 3으로 설정합니다.

      - activation: 활성화 함수를 설정합니다.

flowfromdirectory()

  • 첫번째 인자: 이미지 경로를 지정합니다.
  • targetsize: 패치 이미지 크기를 지정합니다. 폴더에 있는 원본 이미지 크기가 다르더라도 targetsize에 지정된 크기로 자동조절됩니다.
  • batchsize: 배치 크기를 지정합니다.
    - class
    mode: 분류 방식에 대해서 지정합니다.
    • categorical: 2D one-hot 부호화된 라벨이 반환됩니다.
    • binary: 1D 이진 라벨이 반환됩니다.
    • sparse: 1D 정수 라벨이 반환됩니다.
    • None: 라벨이 반환되지 않습니다.
  • open/keras-강좌.txt
  • 마지막으로 수정됨: 2020/06/02 09:25
  • 저자 127.0.0.1