반응형

mini batch란?

미니 배치(Mini-batch)는 데이터를 작은 그룹으로 나누어 신경망 모델의 학습을 수행하는 방법입니다. 일반적으로 전체 데이터셋을 한 번에 사용하여 학습하는 것보다 미니 배치를 사용하는 것이 계산 효율성과 일반화 성능 측면에서 유리합니다.

 

mini batch 학습 단계

  1. 데이터셋 분할: 전체 데이터셋을 작은 배치로 나눕니다. 배치는 주로 2 거듭제곱 개수로 설정됩니다(: 32, 64, 128 ).
  2. 순전파: 미니 배치에 대해 순전파를 수행하여 예측값을 계산합니다. 입력 데이터와 예측값을 기반으로 손실 함수를 계산합니다.
  3. 역전파: 손실 함수를 사용하여 역전파를 수행하여 가중치와 편향에 대한 그래디언트(gradient) 계산합니다.
  4. 매개변수 업데이트: 계산된 그래디언트를 사용하여 가중치와 편향을 업데이트합니다. 이를 위해 최적화 알고리즘(: 확률적 경사 하강법) 사용합니다.
  5. 위의 2~4단계를 반복: 나머지 미니 배치에 대해서도 순전파, 역전파, 매개변수 업데이트를 반복하여 모든 미니 배치에 대한 학습을 완료합니다.

 

mini batch 장점

  • 계산 효율성: 전체 데이터셋을 한 번에 처리하는 것보다 작은 배치로 처리하는 것이 계산 속도를 향상시킵니다. 특히 GPU와 같은 병렬 컴퓨팅 환경에서 효과적입니다.
  • 일반화 성능: 미니 배치 학습은 모델이 더 일반화되도록 도움을 줍니다. 미니 배치를 사용하면 데이터의 다양성을 높이고, 모델이 더 일반적인 패턴을 학습하도록 돕습니다.
  • 경사 하강법의 안정성: 미니 배치 학습은 학습 과정에서 그래디언트의 평균을 사용하기 때문에 노이즈에 대한 영향을 줄일 있습니다. 이는 학습 과정의 안정성을 향상시킵니다.
반응형

'머신러닝 & 딥러닝 > 용어' 카테고리의 다른 글

Bounding box coordinates(in 딥러닝)  (0) 2023.04.09
반응형
반응형

SVM이란

SVM은 "Support Vector Machine(서포트 벡터 머신)"의 약자로, 패턴 인식, 분류 및 회귀 분석 등의 머신러닝 문제에 널리 사용되는 지도 학습 알고리즘입니다.

SVM은 주어진 데이터를 고차원 공간으로 매핑하여 데이터를 분류하는 결정 경계를 찾는 기법입니다. 이를 위해 SVM은 데이터 포인트들을 서로 구분하는 최대 마진(Margin)을 갖는 결정 경계를 찾는 것을 목표로 합니다. 이 최대 마진을 갖는 결정 경계는 데이터를 더욱 정확하게 분류할 수 있는 경계라고 볼 수 있습니다.

SVM은 다음과 같은 주요 특징을 갖습니다:

  1. 선형 분류와 비선형 분류: SVM은 선형 분류 문제에서 뛰어난 성능을 발휘할 수 있습니다. 그러나 데이터가 선형적으로 분리되지 않는 경우에도 커널 트릭(kernel trick)을 사용하여 비선형 결정 경계를 생성할 수 있습니다. 커널 트릭은 데이터를 고차원 공간으로 매핑하여 선형 분류를 수행하는 것보다 효율적인 방법입니다.
  2. 서포트 벡터: SVM은 분류 경계와 가장 가까이 위치한 데이터 포인트들을 "서포트 벡터"라고 부릅니다. 이 서포트 벡터들이 결정 경계를 정의하는 데 중요한 역할을 합니다. SVM은 오직 서포트 벡터들만을 사용하여 결정 경계를 구성하고, 이를 통해 계산 및 예측 과정에서 효율성을 높입니다.
  3. 커널 함수: SVM은 커널 함수를 사용하여 데이터를 고차원 공간으로 매핑합니다. 커널 함수는 입력 데이터의 특성을 적절하게 변환하여 선형 불가능한 문제를 해결할 수 있도록 돕습니다. 대표적인 커널 함수로는 선형 커널, 다항식 커널, 가우시안(RBF) 커널 등이 있습니다.

SVM 데이터의 분류 외에도 회귀 분석에도 사용될 있습니다. SVM 회귀는 주어진 데이터 포인트들이 일정한 마진 내에서 얼마나 위치하는지를 고려하여 회귀 분석을 수행합니다.

 

 

 

추가 지식

- 최대 마진(Maximum Margin) SVM 데이터를 분류하는 결정 경계와 클래스 간의 가장 넓은 간격을 의미합니다.

반응형

'머신러닝 & 딥러닝' 카테고리의 다른 글

Feature space  (0) 2023.05.14
Failed to get CPU frequency: 0 Hz  (0) 2023.05.06
tf.config.set_visible_devices()  (0) 2023.05.06
[library] seaborn  (0) 2023.04.28
AUC란?  (0) 2023.04.26
반응형
반응형

Feature space이란?

머신러닝에서 "feature space(특성 공간)"란 데이터의 특성을 나타내는 변수들로 이루어진 공간을 의미합니다. 각 데이터 포인트는 이 특성 공간 상의 한 점으로 표현됩니다.

데이터의 특성은 문제에 따라 다르지만, 일반적으로 숫자, 범주형 값, 텍스트, 이미지 등으로 표현됩니다. 이러한 특성들은 모델이 패턴을 학습하고 예측을 수행하는 데 사용됩니다.

예를 들어, 이미지 분류 문제에서 각 이미지는 특성 공간 상의 한 점으로 표현됩니다. 이 특성 공간은 이미지의 각 픽셀 값을 차원으로 갖는 공간일 수 있습니다. 따라서 64x64 크기의 이미지는 4,096 차원의 특성 공간으로 표현될 수 있습니다.

Feature space의 차원 수는 데이터셋에 따라 다를 수 있으며, 머신러닝 알고리즘의 성능과 학습의 복잡도에 영향을 줄 수 있습니다. 때로는 feature space의 차원을 줄이는 차원 축소 기법을 사용하기도 합니다. 이를 통해 고차원 데이터를 저차원의 특성 공간으로 매핑하여 계산 및 시각화의 효율성을 높일 수 있습니다.

 

Feature space 그림 설명

위의 그림은 2차원 feature space를 나타냅니다. 여기에는 두 개의 특성, Feature 1과 Feature 2가 있습니다. 각각의 데이터 포인트는 특성 공간 상의 한 점으로 표현됩니다.

예를 들어, (3, 2)는 Feature 1의 값이 3이고 Feature 2의 값이 2인 데이터 포인트를 나타냅니다. 마찬가지로, (1, 4), (5, 6), (2, 1)은 각각 다른 데이터 포인트를 나타냅니다.

머신러닝 모델은 이러한 데이터 포인트들을 분석하여 패턴을 학습하고 예측을 수행합니다. Feature space에서는 데이터 포인트들 간의 상대적인 위치와 패턴을 이해하여 결정 경계를 학습할 수 있습니다. 이렇게 feature space를 이해하면, 머신러닝 모델이 어떻게 데이터를 분류하고 예측하는지 더 잘 이해할 수 있습니다.

 

Feature space에서 feature 간의 distance 측정 방법

1. 유클리디안 거리(Euclidean distance): 유클리디안 거리는 feature space에서 가장 흔히 사용되는 거리 측정 방법입니다. 두 점 A(x1, y1)와 B(x2, y2) 사이의 유클리디안 거리는 아래와 같이 계산됩니다.

distance = sqrt((1 - 3)^2 + (4 - 2)^2) = sqrt(4 + 4) = sqrt(8) ≈ 2.83

 

예를 들어, 2차원 feature space에서 (3, 2)와 (1, 4) 사이의 거리를 계산하려면 다음과 같이 계산합니다:

distance = sqrt((x2 - x1)^2 + (y2 - y1)^2)

 

2. 맨하탄 거리(Manhattan distance): 맨하탄 거리는 두 점 사이의 가로 및 세로 방향의 거리를 합산하여 계산하는 방법입니다. 맨하탄 거리는 두 점 사이의 "도시 블록" 거리라고도 불립니다. 두 점 A(x1, y1)와 B(x2, y2) 사이의 맨하탄 거리는 아래와 같이 계산됩니다.

distance = |1 - 3| + |4 - 2| = 2 + 2 = 4

 

예를 들어, 2차원 feature space에서 (3, 2)와 (1, 4) 사이의 거리를 맨하탄 거리로 계산하면 다음과 같습니다:

distance = |x2 - x1| + |y2 - y1|

 

3. 코사인 유사도(Cosine similarity): 코사인 유사도는 벡터 간의 방향성을 고려하여 거리를 측정하는 방법입니다. 특히, 희소한(high-dimensional sparse) 벡터에 유용하게 사용됩니다. 두 벡터 A와 B 사이의 코사인 유사도는 아래와 같이 계산됩니다.

similarity = dot(A, B) / (norm(A) * norm(B))

 

여기서 **dot(A, B)**는 벡터 A와 B의 내적(dot product)을 나타내며, **norm(A)**와 **norm(B)**는 각각 벡터 A와 B의 노름(norm)을 나타냅니다.

 

추가 지식

sqrt():  x의 제곱근의 비음수 값을 계산합니다. 리턴 값으로는 제곱근 결과를 리턴합니다. x가 음수인 경우, 함수는 errno EDOM으로 설정하고 0을 리턴합니다.

반응형

'머신러닝 & 딥러닝' 카테고리의 다른 글

SVM  (0) 2023.05.14
Failed to get CPU frequency: 0 Hz  (0) 2023.05.06
tf.config.set_visible_devices()  (0) 2023.05.06
[library] seaborn  (0) 2023.04.28
AUC란?  (0) 2023.04.26
반응형
반응형

AUC란?

AUC는 Area Under Curve의 약어입니다.

AUROC라고 불리기도 하며, AUROC는 Area under the ROC(receiver operating characteristic) curve의 약어입니다.

(정확하게 이해하기 위해서는 ROC의 뜻이 뭔지 알아야합니다.)

AUC는 ROC curve의 밑면적을 말합니다. 그러므로 성능 평가에 수치적인 기준이 될 수 있습니다. 1에 가까울수록 그래프가 좌상단

 

 

ROC란?

ROC는 Receiver Operating Characteristic curve의 약어입니다. FPR(False positive rate)과 TPR(True Positive Rate)을 각각 x, y 축으로 놓은 그래프입니다.

 

TPR이란?

1인 케이스에 대해 1로 바르게 예측하는 비율을 말합니다.

 

FPR이란?

0인 케이스에 대해 1로 틀리게 예측하는 비율입니다.

 

 

추가적인 내용은 아래 사이트를 참조하시면 됩니다.

https://towardsdatascience.com/understanding-the-roc-curve-in-three-visual-steps-795b1399481c

 

Understanding the ROC curve in three visual steps

One of the metrics that took me longer to understand in Data Science was the Receiver Operating Characteristic (ROC) curve. This is a…

towardsdatascience.com

 

반응형

'머신러닝 & 딥러닝' 카테고리의 다른 글

tf.config.set_visible_devices()  (0) 2023.05.06
[library] seaborn  (0) 2023.04.28
ModuleNotFoundError: No module named ""  (0) 2023.04.25
'NoneType' object has no attribute 'shape'  (0) 2023.04.13
pin_memory란?  (0) 2023.04.11
반응형

NoneType' object has no attribute 'shape' 발생 원인

상황

Jupyter notebook에서 ime.shape을 사용할 때 발생했습니다.

 

원인

image가 없는 상태에서 읽어오고 shape 함수를 사용해서 발생했습니다.

 

해결

이미지 불러올 때 경로를 수정해줬습니다.

 

반응형

'머신러닝 & 딥러닝' 카테고리의 다른 글

AUC란?  (0) 2023.04.26
ModuleNotFoundError: No module named ""  (0) 2023.04.25
pin_memory란?  (0) 2023.04.11
torchvision.transforms.ToTensor()  (0) 2023.04.10
Data annotation이란?  (0) 2023.04.10
반응형
반응형

pin_memory란?

pin_memory는 PyTorch에서 제공하는 옵션으로써, GPU에서 데이터 로드할 때 빠르게 옮기기 위해서 사용하는 것을 말합니다.

 

 

pin_memory 사용하는 이유는?

pin_memor를 사용하는 이유는 GPU 같은 경우 DRAM에 할당된 데이터(변수)를 사용하지 못하기 때문에 GPU에서 사용하기 위해 pinned memory로 데이터롤 옮기고 다시 VRAM(GPU 메모리)로 옮기는 과정에서 속도가 많이 느려지는 것을 막기 위해 DRAM을 통하지 않고 바로 VRAM으로 데이터 할당해줘 데이터 로드 속도 개선하는 역활을 하기 때문입니다.

반응형

'머신러닝 & 딥러닝' 카테고리의 다른 글

ModuleNotFoundError: No module named ""  (0) 2023.04.25
'NoneType' object has no attribute 'shape'  (0) 2023.04.13
torchvision.transforms.ToTensor()  (0) 2023.04.10
Data annotation이란?  (0) 2023.04.10
end-to-end란?  (0) 2023.04.09
반응형

torchvision.transforms.ToTensor()이란?

torchvision.transforms.ToTensor() class는 PIL 이미지 또는 numpy 배열을 pytorch tensor로 변화 시켜주는  클래스입니다.

반응형

 

즉, 이미지를 PIL 이미지 또는 numpy 배열의 구조를 "Channel x Height x Width"로 바꿔줍니다.

그리고 이미지 픽셀의 밝기를 [0~225]를 [0~1]로 수정합니다.

 

from torchvision.transforms import ToTensor
from PIL import Image
import numpy as np

test_img  = Image.open('test.jpg')
img_array  = np.array(test_img)

tf_toTensor = ToTensor()

# PIL
img_tensor = tf_toTensor(test_img)
print(img_tensor_PIL)
print(img_tensor_PIL.size()) # 3 x 428 x 428
print(img_tensor_PIL.min(), img_tensor_PIL.max()) # 0~1

# numpy
img_tensor_ndarray = tf_toTensor(img_array)
print(img_tensor_ndarray)
print(img_tensor_ndarray.size()) # 3 x 428 x 428
print(img_tensor_ndarray.min(), img_tensor_ndarray.max()) # 0~1
반응형

'머신러닝 & 딥러닝' 카테고리의 다른 글

'NoneType' object has no attribute 'shape'  (0) 2023.04.13
pin_memory란?  (0) 2023.04.11
Data annotation이란?  (0) 2023.04.10
end-to-end란?  (0) 2023.04.09
Fully Connected Layers  (0) 2023.04.07
반응형

Bounding box 이란?

Bounding box는 이미지 안에서 박스 형태로 위치를 표시해주는 것을 말합니다.

Coordinates 이란?

Coordinates는 좌표라는 뜻을 가지고 있고, 딥러닝에서도 좌표라는 의미로 사용됩니다.

 

Bounding box Coordinates

Bounding box에서 사용되는 coordinate는 보통 center coordinatescorner coordinates입니다. 

기본적으로 center coordinates은 주로 IoU를 계산할 때 사용됩니다. corner coordinates는 anchor나 MSELoss를 계산할 때 사용합니다.

 

 

cx = (x1 + x2) / 2

cy = (y1 + y2) / 2

w = x2 -x1

h = y2 -y1

 

 

 

 

 

 

코드

def corner_to_center(corner_boxes):
    """
    input
    corner_boxes: corner coordinates boxes : [N, 4] (x1, y1, x2, y2)
    output
    center_boxes: center coordinates boxes : [N, 4] (cx, cy, w, h)
    """
    cxcy = (corner_boxes[..., :2] + corner_boxes[..., 2:4]) / 2
    wh = corner_boxes[..., 2:4] - corner_boxes[..., :2]
    centor_boxes = torch.cat([cxcy, wh], dim=-1)
    return centor_boxes
    
    
def center_to_corner(center_boxes):
    """
    input
    center_boxes : center coordinates boxes : [N, 4] (cx, cy, w, h)
    output
    corner_boxes : corner coordinates boxes : [N, 4] (x1, y1, x2, y2)
    """
    x1y1 = center_boxes[..., :2] - (center_boxes[..., 2:4])/2
    x2y2 = center_boxes[..., :2] + (center_boxes[..., 2:4])/2
    corner_boxes = torch.cat([x1y1, x2y2], dim=-1)
    return corner_boxes

 

 

 

 

 

 

반응형

'머신러닝 & 딥러닝 > 용어' 카테고리의 다른 글

[용어]mini batch  (0) 2023.05.14

+ Recent posts