데이터셋을 훈련셋, 검증셋, 시험셋으로 나눈다.
세 개의 신호를 받아 하나의 신호를 전달하는 뉴런을 레고로 표현하면 다음과 같다.
Dense 레이어는 입력과 출력을 모두 연결해줍니다. 예를 들어 입력 뉴런이 4개, 출력 뉴런이 8개있다면 총 연결선은 32개 (4*8=32) 입니다. 각 연결선에는 가중치(weight)를 포함하고 있는데, 이 가중치가 나타내는 의미는 연결강도라고 보시면 됩니다. 현재 연결선이 32개이므로 가중치도 32개입니다.
Dense(8, input_dim=4, init='uniform', activation='relu')
주요 인자는 다음과 같습니다.
- activation: 활성화 함수를 설정합니다.
Dense 레이어는 입력 뉴런 수에 상관없이 출력 뉴런 수를 자유롭게 설정할 수 있기 때문에 출력층으로 많이 사용됩니다. 이진 분류문제에서는 0과 1을 나타내는 출력 뉴런이 하나만 있으면 되기 때문에 아래 코드처럼 출력 뉴런이 1개이고, 입력 뉴런과 가중치를 계산한 값을 0에서 1사이로 표현할 수 있는 활성화 함수인 sigmoid 를 사용합니다.
Dense(1, input_dim=3, activation='sigmoid')
다중클래스 분류문제에서는 클래스 수만큼 출력 뉴런이 필요합니다. 만약 세가지 종류로 분류한다면, 아래 코드처럼 출력 뉴런이 3개이고, 입력 뉴련과 가중치를 계산한 값을 각 클래스의 확률 개념으로 표현할 수 있는 활성화 함수인 softmax 를 사용합니다.
Dense(3, input_dim=4, activation='softmax')
Dense 레이어는 보통 출력층 이전의 은닉층으로도 많이 쓰이고, 영상이 아닌 수치자료 입력 시에는 입력층으로도 많이 쓰입니다. 이 때 활성화 함수로 'relu'가 주로 사용됩니다. 'relu'는 학습과정에서 역전파 시에 좋은 성능이 나는 것으로 알려져 있습니다.
Dense(4, input_dim=6, activation='relu')
모델을 정의했다면 모델을 손실함수와 최적화 알고리즘으로 엮어봅니다.
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
모델을 학습시키기 위해서 fit()함수를 사용합니다.
model.fit(x_train, y_train, epochs=1500, batch_size=64)
케라스에서 제공되는 컨볼루션 레이어 종류에도 여러가지가 있으나 영상 처리에 주로 사용되는 Conv2D 레이어를 살펴보겠습니다. 레이어는 영상 인식에 주로 사용되며, 필터가 탑재되어 있습니다. 아래는 Conv2D 클래스 사용 예제입니다.
Conv2D(32, (5, 5), padding='valid', input_shape=(28, 28, 1), activation='relu')
주요 인자는 다음과 같습니다.
- input_shape: 샘플 수를 제외한 입력 형태를 정의합니다. 모델에서 첫 레이어일 때만 정의하면 됩니다.
- activation: 활성화 함수를 설정합니다.
flowfromdirectory()