tensorflow v2 (2)

km-ji·2024년 1월 31일

tensorflow

목록 보기
4/9

모델 만드는 법

  • sequential 방법
    - layer를 순차적으로 쌓아가는 것
  • functional 방법
    - sequential 보다 고급 방법. 여러 함수 쓰는 것.

sequential 방법으로 모델 만들기

model = models.Sequential()
model.add(layers.Dense(input_dim=28*28, units=512, activation='relu', kernel_initializer='he_uniform'))

tf.keras 안의 layers의 Dense는 층을 쌓아 올릴때 촘촘하게 쌓는 것을 말한다.
activation은 relue를 사용할건데, 저기에 tanh나 sigmoid 등을 써도 된다.
kernel_initializer는 세타를 초기화해주는 것인데, he_uniform(균등분포)과 he_normal(정규분포)이 있다.

model.add(layers.Dropout(0.2))

Dropout은 훈련 과정 중에 랜덤하게 일부 뉴런을 제거하는 것이다.
이는 과적합을 방지하고, 모델의 일반화 성능을 향상시키기 위한 정규화 기법 중 하나이다.

Dropout이 사용되면,

  • 네트워크는 특정 뉴런이나 특징에 과도하게 의존하지 않게 되어, 다양한 특징을 학습하게 되면서 일반화 능력이 향상된다.
  • Dropout은 앙상블의 효과를 내기도 한다.
  • 여러 드롭아웃이 적용된 모델을 결합하면 하나의 모델보다 더 강력한 예측 성능을 얻을 수 있다.

각 배치마다 20%가 랜덤하게 선택되어 비활성화 된다는 것이다.

model.add(layers.Dense(units=10, activation='softmax'))

output layer를 위해 처리해주는 것.
units는 (원핫벡터 df 봤을 때) 처음에 열이 0부터 9까지였으니까 10으로 설정해주는 것이고,
softmax처리를 해주면, 10개의 숫자 값을 다 합쳤을 때 1이 나오게 됨.

from tensorflow.keras import datasets, models, layers, utils, losses, optimizers

맨 뒤 optimizers 추가

model.compile(optimizer='adam', 
              loss=losses.categorical_crossentropy, 
              metrics=['accuracy'])

첫번째 줄은 최적화 알고리즘을 설정하는 것이다.
adam은 경사 하강법의 한 종류로, 신경망을 효과적으로 최적화하는 데 사용되는 알고리즘이다.
그 다음, 손실함수를 설정한다. categorical crossentropy는 다중 클래스 분류 문제에서 주로 사용되는 손실 함수 중 하나로, 모델의 예측과 실제 레이블 간의 차이를 측정한다.

  • entropy는 무질서한 정도를 나타낸다.
  • entropy가 낮을수록 더 예측 가능하고, 높을수록 더 무질서하며 예측이 어려운 상태이다.

metircs=['accuracy']는 모델의 성능을 평가할 지표를 설정하는 것이다. 정확도는 모델이 올바르게 분류한 샘플의 비율을 나타낸다.

  • 성능 지표로는, Precision / Recall / F1-Score 도 있다.

하단의 것은 회귀, 멀티, 이진 분류마다 나눠 작성돼 있는 코드이다.
나중에 내가 쓰게될 수도 있으니.. 저장 ㅎㅎ

# Regression
# model.add(layers.Dense(units=1, activation=None))
# model.compile(optimizer='adam',
#               loss=losses.mean_squared_error,
#               metrics=['mean_squared_error']) 

# Multi-class classification
# model.add(layers.Dense(units=10, activation='softmax'))
# model.compile(optimizer='adam',
#               loss=losses.categorical_crossentropy,        # <- Label이 One-hot 형태일 경우
#               loss=losses.sparse_categorical_crossentropy, # <- Label이 One-hot 형태가 아닐 경우
#               metrics=['accuracy']) 

# Binary Classification 1 (Softmax를 적용하는 경우, recommended)
# model.add(layers.Dense(units=2, activation='softmax'))
# model.compile(optimizer='adam',
#               loss=losses.categorical_crossentropy,
#               metrics=['accuracy']) 

# # Binary Classification 2 (Sigmoid를 적용하는 경우)
# # 선형결합 결과에 대해 sigmoid function의 output을 계산해주면, binary_crossentropy가 이를 음성 & 양성 확률로 변환하여 처리해줍니다.
# model.add(layers.Dense(units=1, activation='sigmoid')) 
# model.compile(optimizer='adam',
#               loss=losses.binary_crossentropy, 
#               metrics=['accuracy']) 
profile
I'm mz. Do you want to try mzing?

0개의 댓글