분류(Classification)

박용민·2022년 3월 21일
0

쉬운 딥러닝

목록 보기
2/8
post-thumbnail

AI는 체격을 보고 초,중,고등학생을 구분이 가능한가?

신경망의 구조

  • 입력층 1개, 은닝측 1개, 출력층 1개로 구성된 FNN
  • 외부에서 들어오는 입력값에 가중치(weight)를 곱한 값을 모두 더하여 하나의 입력값으로 정돈한다.
  • 가중치가 큰 입력값은 퍼셉트론에 크게 영향을 미치고, 가중치가 작은 입력값은 퍼셉트론에 작은 영향을 미친다.
  • 입력층은 <성별>, <키>, <체중> 3동류의 데이터를 입력받기 위해 크기를 3으로 설정
  • 출력층에는 Softmax라는 활성화 함수가 적용 연산을 거치면 확률 질량 함수로서의 의미를 가짐
층수종류크기활성화 함수
1층FNN3없음
2층FNN128ReLu
3층FNN3Softmax

딥러닝 모델 코딩

"""
Author : Byunghyun Ban
Date : 2020.07.24.
"""
from tensorflow import keras
import data_reader

# 몇 에포크 만큼 학습을 시킬 것인지 결정합니다.
EPOCHS = 20  # 예제 기본값은 20입니다.

# 데이터를 읽어옵니다.
dr = data_reader.DataReader()

# 인공신경망을 제작합니다.
model = keras.Sequential([
    keras.layers.Dense(3),
    keras.layers.Dense(128, activation="relu"),
    keras.layers.Dense(3, activation='softmax')
])

# 인공신경망을 컴파일합니다.
# optimizer는 인공신경망의 가중치를 조절하기 위한 알고리즘 'adam'을 사용하면 대체로 좋은 결과를 얻는다.
# loss는 인공신경망을 학습시키기 위한 기준이 되는 함수, 로스가 작으면 작을수록 성능이 높다.
# 분류 문제에서는 '크로스 엔트로피(cross-entropy)를 사용하는 것이 적절하다.
# metrics은 성능 검증을 위한 척도를 의미하며 정확도를 의미하는 accuracy를 사용한다.
model.compile(optimizer="adam", metrics=["accuracy"],
              loss="sparse_categorical_crossentropy")

# 인공신경망을 학습시킵니다.
print("************ TRAINING START ************")
# monnitor는 학습을 조기 중단하기 위한 기준으로 삼을 지표를 의미한다.
# patience에는 해당 숫자만큼 에포크가 성능 개선이 없으면 중단한다.
# 너무 짧으면 충분한 학습이 진행되기 전에 종료되어버린다
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
history = model.fit(dr.train_X, dr.train_Y, epochs=EPOCHS,
                    validation_data=(dr.test_X, dr.test_Y),
                    callbacks=[early_stop])

# 학습 결과를 그래프로 출력합니다.
data_reader.draw_graph(history)

AI는 꽃을 구분할 수 있을까?

신경망의 구조

  • 4개의 피처 <꽃받침 길이,너비,꽃잎 길이,넙비>
  • 2층 아래에 'Dropout'이라는 값을 대입
층수종류크기활성화 함수
1층FNN4없음
2층FNN128ReLu
-Dropoutrate=0.5-
3층FNN3Softmax

드롭아웃

  • 신경 일부를 버리는 기법
  • 드롭아웃의 크기에 'rate=0.x(0~1)'로 기재하면 대상은 매번 임의로 선택되어 지정된 퍼셉트론은 잠시동안 가중치가 0으로 설정되어 다른 퍼셉트론으로 정보를 전달하지 못한다.
  • 오버피팅을 방지하는 효과가 있다.

"""
Author : Byunghyun Ban
Date : 2020.07.24.
"""
from tensorflow import keras
import data_reader

# 몇 에포크 만큼 학습을 시킬 것인지 결정합니다.
EPOCHS = 20  # 예제 기본값은 20입니다.

# 데이터를 읽어옵니다.
dr = data_reader.DataReader()

# 인공신경망을 제작합니다.
model = keras.Sequential([
    keras.layers.Dense(4),
    keras.layers.Dense(128, activation="relu"),
    keras.layers.Dropout(rate=0.5),
    keras.layers.Dense(3, activation='softmax')
])

# 인공신경망을 컴파일합니다.
model.compile(optimizer="adam", metrics=["accuracy"],
              loss="sparse_categorical_crossentropy")

# 인공신경망을 학습시킵니다.
print("\n\n************ TRAINING START ************ ")
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
history = model.fit(dr.train_X, dr.train_Y, epochs=EPOCHS, batch_size=5,
                    validation_data=(dr.test_X, dr.test_Y),
                    callbacks=[early_stop])

# 학습 결과를 그래프로 출력합니다.
data_reader.draw_graph(history)

앙상블(ensemble) 학습

  • 문제를 해결하기 위해 여러 개의 모델을 학습시키는 것을 의미한다.
  • 동일한 알고리즘 모델을 여러 개 학습시키는 방법도 있고, 여러 종류의 알고리즘을 각각 학습시키는 방법도 있다.
  • 다수결의 원칙에 따라 AI의 의견을 투표로 취합하는 보팅(voting)기법이 가장 쉬운 방법이다.

0개의 댓글

관련 채용 정보