상세 컨텐츠

본문 제목

Deep Learning 공부하기 ( 2 )

경험 리뷰/한국경제 with Tossbank

by shok11 2024. 9. 19. 14:30

본문

728x90
반응형

 

쉴까? 했지만 해야지... 다들 화이팅


Tensor

딥러닝 모델이 데이터를 처리하고 학습할 때 사용하는 다차원 배열을 의미한다. 이는 딥러닝 모델에서 입력 데이터, 가중치, 출력값 등 다양한 형태로 사용되며, 딥러닝 연산의 기본 단위로 작용한다.

 

텐서란 무엇인가?

텐서는 스칼라, 벡터, 행렬을 일반화한 개념이다. 텐서의 차원은 다음과 같은 구조로 이루어진다.

  • 0차원 텐서 : 스칼라(숫자 하나)로, 단일 값이다.
    • 예: 3( 정수 ) 또는 1.5( 실수 )
  • 1차원 텐서 : 벡터( 숫자의 리스트 )로, 여러 개의 숫자가 일렬로 나열된 구조이다.
    • 예: [3, 5, 7]
  • 2차원 텐서 : 행렬로, 행과 열로 이루어진 숫자의 배열이다.
    • 예: [[3, 5, 7], [2, 4, 6]]
  • 3차원 이상의 텐서 : 3차원 이상의 텐서는 여러 개의 행렬이 겹쳐진 형태로, 다차원 배열이다.
    • 예: [[[3, 5], [2, 4]], [[7, 6], [8, 9]]]

 

텐서의 차원과 형상

텐서는 차원(dimension)과 형상(shape)을 가진다. 차원은 텐서의 축(axis)의 개수를 의미하며, 형상은 각 차원에서의 크기다. 예를 들어, 다음과 같은 텐서를 생각해볼 수 있다.

import numpy as np
tensor = np.array([[3, 5, 7], [2, 4, 6]])
print(tensor.shape)

위 텐서는 2개의 행과 3개의 열을 가지는 2차원 텐서이며, 형상은 (2, 3)이다.

 

TensorFlow에서의 텐서

딥러닝 프레임워크인 TensorFlowPyTorch와 같은 라이브러리에서 텐서는 중요한 데이터 구조이다. TensorFlow에서는 텐서를 생성하고 조작하는 다양한 함수들이 제공되며, 아래와 같은 방법으로 텐서를 만들 수 있다.

import tensorflow as tf

# 2차원 텐서 생성
tensor = tf.constant([[3, 5, 7], [2, 4, 6]])
print(tensor)

tf.constant는 상수 텐서를 생성하는 함수로, 2차원 행렬 형태의 텐서를 생성한다.

 

텐서의 기본 연산

텐서는 기본적으로 수학적 연산을 적용할 수 있다. 예를 들어, 덧셈, 뺄셈, 곱셈 등의 연산을 텐서에 적용하여 새로운 텐서를 만들 수 있다. 다음은 덧셈 연산 예시이다.

a = tf.constant([[1, 2], [3, 4]])
b = tf.constant([[5, 6], [7, 8]])

# 텐서 덧셈 연산
result = tf.add(a, b)
print(result)

이처럼, 텐서 간의 기본적인 수학 연산을 적용할 수 있으며, 이를 통해 딥러닝 모델의 계산 과정을 구현한다.

 

딥러닝에서 텐서의 중요성

딥러닝 모델의 모든 입력 데이터와 가중치, 출력값은 텐서로 표현된다. 이 때문에 텐서의 차원과 형상을 이해하는 것이 중요하며, 이를 기반으로 신경망의 구조를 설계할 수 있다. 예를 들어, 이미지 데이터는 3차원 텐서(높이, 너비, 채널)로 표현되며, 자연어 처리 데이터는 2차원 또는 3차원 텐서로 표현될 수 있다.

 


코딩 애플에서 제공하는 대학 합격 예측 AI 만들기를 진행 한다.

 

제공 데이터를 받아서 확인 한다.

 

 

결측값을 확인 한다.

 

결측값을 제거하고, 원본 데이터를 보존 한다.

 

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(64, activation='relu'), # 노드가 여러개 있는 hidden layer이고, (숫자)는 노드의 개수이다.
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid'), # 마지막 레이어 / 결과를 여러개 뽑고 싶으면 숫자를 올리면 된다. / 0~1 사이의 확률을 얻고 싶기 때문에 시그모이드 함수 사용
]) # 딥러닝 모델

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # 가중치 조절 learning rate / 0~1사이 분류 문제에서 사용하는 loss함수 / 평가 요소

model.fit( np.array(X_data), np.array(y_data), epochs=10 ) # 데이터를 몇번 학습 시킬건가? / Python list를 넣을 수는 없다. numpy array거나 tf tensor 형식으로 넣어줘야 한다.

admit을 0 ~ 1 사이로 합격 확률을 예측하기 위한 모델 이다. TensorFlow의 Keras를 사용한 딥러닝 모델이다. 이 모델은 순차적으로 레이어가 쌓이는 Sequential 모델로, 입력층과 두 개의 은닉층, 출력층으로 구성되어 있다.

 

 

  • 첫 번째 은닉층: 64개의 노드가 있으며, 활성화 함수 ReLU(Rectified Linear Unit)를 사용하여 비선형성을 부여한다.
  • 두 번째 은닉층: 128개의 노드가 있으며, 활성화 함수 ReLU(Rectified Linear Unit)를 사용하여 비선형성을 부여한다.
  • 출력층: 1개의 노드를 가지고 있으며, 활성화 함수로 Sigmoid를 사용해 0과 1 사이의 값을 출력한다.

 

  • Optimizer, Adam: 최적화 알고리즘은 학습 속도를 적절히 조절하면서 빠르게 수렴할 수 있도록 도와준다.
  • Loss: binary_crossentropy: 이진 분류 문제에서 자주 사용하는 손실 함수로, 0과 1 사이의 분류 문제에 적합하다.
  • Metrics: 정확도를 평가하는 지표로 'accuracy'를 사용한다.

 

 

for 반복문을 사용하여 입력 데이터(X_data)를 리스트 안에 리스트 형태로 구성하였다.

X_data는 [ [gre 값, gpa 값, rank 값], ... ] 형태로 생성하였다.

 

c_df[ 'admit' ].values를 사용하여 admit 컬럼의 값을 배열 형태로 추출했다. 이 값들은 0과 1로 구성된 이진 데이터로, 합격(1) 또는 불합격(0)을 나타낸다.

 

연습 데이터이기 때문에 데이터의 양이 적고 데이터셋 내에서 맥락이 맞지 않는 값들이 포함되어 있기에 높은 성능을 기대하기는 어렵지만, 진행해보겠습니다.

 

model.fit( np.array(X_data), np.array(y_data), epochs=1000 )

모델 학습을 진행할 때 10번의 epochs( 반복 )로 설정했을 때, accuracy( 정확도 )가 충분히 높게 나오지 않았다. 이는 학습 횟수가 부족했기 때문일 수 있다. 따라서 모델이 데이터를 충분히 학습할 수 있도록 에포크 수를 1000번으로 늘려 학습을 진행했다.

 

 

여전히 좋지 않지만, 예측을 진행 해보겠다.

딥러닝 모델의 다양한 파라미터를 조절해서 모델의 성능을 높일 수 있다.

 

  • 레이어의 개수와 노드 수: 레이어의 개수를 늘리거나 노드 수를 조정하여 모델의 복잡성을 높일 수 있다.
  • 활성화 함수 변경: relu, sigmoid, tanh 등 다양한 활성화 함수를 사용하여 성능을 개선할 수 있다.
  • 최적화 기법: SGD, RMSprop 등 다른 최적화 기법을 적용해보는 것도 하나의 방법입니다.
  • 드롭아웃(dropout): 과적합을 방지하기 위해 드롭아웃을 사용하여 학습 중 일부 노드를 임의로 제외할 수 있다.

 

 

# 예측

예측값 = model.predict(np.array([[750, 3.70, 3], [400, 2.2, 1]]))

print(예측값)

750점 3.7학점 이 3등급 대학에 붙은 확률?

400점 2.2학점 이 1등급 대학에 붙은 확률? 을 예측하는 코드 이다.

 

89% 와 28%가 나왔다.

 

딥러닝 모델은 데이터의 전처리, 학습 횟수, 그리고 다양한 하이퍼파라미터 조정에 따라 그 성능이 크게 달라질 수 있다.

작은 데이터셋이더라도 충분한 에포크 수와 적절한 파라미터 조정을 통해 성능을 향상시킬 수 있다.

모델 학습과 데이터 전처리를 반복하면서 개선하는 방법을 찾아볼 예정 입니다. 감사합니다.


참고 자료

 

https://www.youtube.com/watch?v=8ftqlASt6HY&list=PLfLgtT94nNq1DrREU_qG2w4yd2ZzJb-FG&index=9

 

 

 

728x90
반응형

관련글 더보기