본문 바로가기
삼정KPMG Future Academy/머신러닝&딥러닝

딥러닝 기초 (Numpy, Tensorflow)

by _이유 2025. 12. 3.

딥러닝

  • 인공신경망(ANN; Artificial Neural Networks) 기법의 은닉층을 깊게 쌓는 구조를 이용해 학습하는 기법
  • 장점
    • 데이터의 특징을 단계별로 추상화를 높여가면서 학습
    • 얕은 은닉층은 점, 선, 면과 같은 추상화 단계가 낮은 특징을 학습
    • 깊은 은닉층은 얼굴의 눈, 코 입 등 추상화 단계가 높은 특징을 학습

CNN; Convolution Neural Network

  • 시각세포의 작동 원리를 본떠서 만들고 이미지를 특정한 영역별로 추출하여 학습시킴
  • 비전에서 주로 filter 연산을 뜻하며 이미지 특징을 찾기 위해 filtering을 수행
  • 이미지, 영상 분류와 인식에 유용

RNN; Recurrent Neural Networks

  • 순차적인 정보를 처리하는데 사용되는 알고리즘으로 다양한 자연어처리 문제에 대해 뛰어난 성능을 보이고 있는 인기있는 모델
  • 전후 관계에 대한 패턴을 학습하는 알고리즘
    자동완성 기능, 음성인식기능, 번역기능, 챗봇, 자막, 작곡, 기사작성, 소설 등

Numpy

  • 리스트보다 데이터의 저장 및 처리가 효율적
  • n dimension array(n차원 배열) - ndarray 타입 제공
  • 선형대수와 관련된 기능 제공 (행렬 연산)
  • 대규모 다차원 배열을 쉽게 처리하는 기능 지원
  • 데이터 과학 도구의 핵심 패키지
    • pandas
    • scipy
    • scikit-learn 등

Numpy 배열 객체 기능

  • 단일 요소에 접근하는 인덱싱
  • 하위배열에 접근하는 슬라이싱
  • Bool 배열을 이용한 마스킹 연산
  • 인덱스 배열을 이용한 팬시 인덱싱
  • 모든 기능을 결합한 복합 인덱스 기능 제공

Array(tensor)의 데이터 표현

  1. 0D 텐서: 스칼라(Scalar)
    •   모양: 점
    •   차원: 0
    •   설명: 방향도 없고 크기만 있는 숫자 하나
    •   Shape: ()
  2. 1D 텐서: 벡터(Vector)
    •   모양: 선
    •   차원: 1
    •   설명: 리스트
    •   Shape: (3,) 또는 (10,)
  3. 2D 텐서: 행렬(Matrix)
    •   모양: 면
    •   차원: 2
    •   설명: 표
    •   Shape: (samples, features)
  4. 3D 텐서: 입체(Cube)
    •   모양: 큐브
    •   차원: 3
    •   설명: 행렬이 여러장 겹쳐 있는 것
    •   Shape: (samples, timesteps, features)
  5. 4D 텐서 - 5D 텐서
    •   4D: 이미지 여러장을 한번에 묶을 때
      (배치 크기, 높이, 너비, 채널) -> 딥러닝 모델에 이미지를 넣을 떄 자주 보임
    •   5D:동영상 데이터
      (배치, 시간, 높이, 너비, 채널)

Tensorflow

딥러닝 모델 설계 방법

딥러닝 모델 구현 과정

  1. X, y 데이터셋 준비
  2. Deep Learning Model 정의
  3. 모델 컴파일 모델 학습
  4. 평가

필요한 모듈 불러오기

# tensorflow lib 안에 있는 keras API에서 필요한 함수 불러오기
from tensorflow.keras.models import Sequential
from tensorflow.kears.layers import Dense

# 데이터를 다루는 데 필요한 라이브러리 불러오기
import numpy as np

# 깃허브에 준비된 데이터 가져오기
git clone <git ssh 주소> (이미 파일이 존재하면 뒤에 . 붙여서 불러오기)

 

데이터 준비 / 모델 정의 / 모델 컴파일 / 실행

# 데이터 불러오기
data_path = 'path'
df = pd.read_csv(data_path)
df.info()

df.describe()

df.head()

# X, y값 정의
X = df.loc[:, 'pregnant':'age']
y = df['diabetes']

 

모델 구조 설계

  • 입력데이터(features): 8개
  • 출력(target): 2진분류 (1개 노드)
# lib import
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Input

# 모델 구조 만들기
model = Sequential()
# input부터 레이어 순서대로 입력
# shape: 데이터의 갯수를 tuple로 넣기
# 은닉층 노드의 경우에는 테스트를 하면서 최적의 값을 찾아야하지만 대체적으로 2의 제곱으로 줄여나가는 방법이 일반적
model.add(Input(shape=(8,)))
model.add(Dense(12, activation = 'relu', name = 'Dense_1'))
model.add(Dense(8, activation = 'relu', name = 'Dense_2'))
model.add(Dense(1

학습 방식 정의

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

학습 진행

history = model.fit(
    X, y, # <- 학습데이터
    epochs=100, # <- 전체 데이터 학습 횟수
    batch_size=5, # <= 한번 학습할 때마다 5개 데이터셋을 학습함. 1 iteration
    verbose='auto'
	)