본문 바로가기
데이터 분석

DeepLearning(Tensorflow, Keras)

by JoinInNoetic 2024. 2. 20.

◆ 인공 신경망

● Tensorflow, Keras 초기 설정

import tensorflow as tf

tf.keras.utils.set_random_seed()

tf.config.experimental.enable_op_determinism()

 

● 데이터 로드

from tensorflow import keras

(X_train, y_train), (X_test, y_test) = keras.datasets.fashion_mnist.load_data()

 

● 데이터 형태 확인

X_train.shape

-> (60000, 28, 28)    # (데이터 개수, 행 픽셀, 열 픽셀)

 

● 이미지 데이터 픽셀로 변환(10개 예시)

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')    # 각 이미지 복호화(숫자를 픽셀로 변환)

    axis[i].axis('off')    # 격자 배경 제거

plt.show()

 

● 이미지 타겟 확인

[y_train[i] for i in range(10)]

 

import numpy as np

np.unique(y_train, return_counts=True)    # 고유값 및 개수 확인 / return_counts=True : 타겟값 각각의 데이터 개수

 

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

● 정규화 및 평탄화

train_scaled = X_train / 255.0    # 255.0 : 이미지 데이터 최대 픽셀값

train_scaled = train_scaled.reshape(-1, 28*28)    # -1 : 모든 데이터 선택 / 28*28 : 평탄화 픽셀개수

 

● SGDClassifier

 

◆ 딥러닝의 개념(인공신경망)

- BGD(Batch Gradient Descent) : 손실함수 값이 최솟값이 되는 모델을 만드는 기법

- SGD(확률적 경사 하강법) : BGD는 전체 데이터를 사용하여 모델을 만들지만 SGD는 랜덤으로 데이터를 일부 추출하여 모델을 만듬

- Input Layer(입력층) : 독립변수

- Hidden Layer(은닉층) : Input Layer로 모델을 만들어 학습하여 나온 값들

- Output Layer(출력층) : 마지막 결과값들

- 활성화함수(relu, sigmoid, softmax) : 결과값들 사이에 차이를 줄이기 위해 결과 범위를 제한하는 함수

 

◆ 텐서플로와 케라스

● 라이브러리 임포트

import tensorflow as tf

from tensorflow import keras

 

● Dense(층) 설정

dense = keras.layers.Dense(10, activation = 'softmax', input_shape=(784, ))

# 10 : 분류 클래스 10개 / activation='softmax' : 활성화함수 softmax로 설정 / input_shape=(784, ) : 해당 층에 입력되는 데이터 

 

● 케라스 모델 만들기

model = keras.Sequential(dense)    # dense를 한번 넘겨주는 것이 1층

 

● 컴파일러 지정 - 모델을 훈련하기 전에 반드시 해줘야함

model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')

-> 손실함수 : 이진크로스 엔트로피 / 매트릭스 : 정확도

 

● 훈련

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

 

● 예측

model.evaluate(val_scaled, val_target)

=> [loss값, 정확도]