[혼공머]인공 신경망

ai_lim·2022년 2월 2일
0

혼공머신

목록 보기
9/14
post-thumbnail
  • 인공 신경망
    생물학적 뉴런에서 영감을 받아 만든 머신러닝 알고리즘이다. 기존의 머신러닝 알고리즘으로 다루기 어려웠던 이미지,텍스트,음성 분야에서 뛰어난 성능을 발휘하면서 크게 주목을 받고 딥러닝(DNN)이라고도 불린다.

  • 텐서플로
    구글이 만든 딥러닝 라이브러리이다. CPU와 GPU를 사용해 인공 신경망 모델을 효율적으로 훈련하며 모델 구축과 서비스에 필요한 다양한 도구를 제공한다. 케라스를 핵심 API로 채택하여 간단한 모델에서 아주 복잡한 모델까지 손쉽게 만들 수 있다.

  • 밀집층
    가장 간단한 인공 신경망의 층이다. 밀집층에서는 뉴런들이 모두 연결되어있기때문에 완전 연결 층이라고도 불린다. 출력층에 밀집층을 사용할 때는 클래스와 동일한 개수의 뉴런을 사용한다.

  • 원-핫 인코딩
    정숫값을 배열에서 해당 정수 위치의 원소만 1이고 나머지는 모두 0으로 변환한다. 다중분류에서 출력층이 만든 확률과 크로스 엔트로피 손실을 계산하기 위해서이다.

7-1 인공 신경망

패션 MNIST

from tensorflow import keras
(train_input,train_target),(test_input,test_target)=keras.datasets.fashion_mnist.load_data()
  • 패션 mnist 데이터 불러오기
print(train_input.shape,train_target.shape)
print(test_input.shape,test_target.shape)

import matplotlib.pyplot as plt
fig,axs = plt.subplots(1,10,figsize=(10,10))
for i in range(10):
  axs[i].imshow(train_input[i],cmap='gray_r')
  axs[i].axis('off')
plt.show()
  • 이미지 확인

print([train_target[i] for i in range(10)])
  • 샘플의 타깃값 확인

import numpy as np
print(np.unique(train_target,return_counts=True))
  • np.unique() : 레이블 당 샘플 개수 확인
  • 0~9 까지 레이블마다 6000개의 샘플이 들어있음

로지스틱 회귀로 패션 아이템 분류하기

train_scaled = train_input/255.0
train_scaled = train_scaled.reshape(-1,28*28)
print(train_scaled.shape)
  • 0-255 픽셀값을 0-1 사이의 픽셀값을 가지도록 전처리
  • SGDClassifier는 2차원 입력을 다루지못함 --> 1차원 배열로 reshape
from sklearn.model_selection import cross_validate
from sklearn.linear_model import SGDClassifier

sc = SGDClassifier(loss='log',max_iter=5,random_state=42)
scores = cross_validate(sc,train_scaled,train_target,n_jobs=-1)
print(np.mean(scores['test_score']))
  • SGDClassifier 클래스와 cross_validate 함수를 사용해서 성능확인

인공신경망으로 모델 만들기


from sklearn.model_selection import train_test_split
train_scaled,val_scaled,train_target,val_target = train_test_split(train_scaled,train_target,test_size=0.2,random_state=42)
  • 데이터셋이 충분히 많아서 교차검증을 안해도 됨
  • 대신 검증 세트을 train 데이터에서 별도로 덜어내어 사용함
dense = keras.layers.Dense(10,activation='softmax',input_shape=(784,))

  • 가장 기본이 되는 Dense 층
  • Dense(뉴런개수, 뉴런의 출력에 적용할 함수, 입력의 크기)
  • 10개의 뉴런에서 출력되는 값을 확률로 바꾸기위해 소프트맥스함수를 사용
model = keras.Sequential(dense)
  • 위에서 만든 dense 밀집층을 가진 신경망 모델을 만들어줌

인공 신경망으로 패션 아이템 분류하기



model.compile(loss='sparse_categorical_crossentropy',metrics='accuracy')
  • 케라스모델을 훈련하기 전에 compile 메서드를 수행해야함!!
  • compile 메서드에서 꼭 지정할 것은 손실함수의 종류
  • categorical_crossentropy : 다중분류
  • sparse : 정수로 된 타깃값을 원-핫 인코딩으로바꾸지 않고 그냥 사용

model.fit(train_scaled,train_target,epochs=5)

model.evaluate(val_scaled,val_target)

출처: 혼공머신

0개의 댓글