전체 글(137)
-
다각형의 넓이 구하기(백준 알고리즘 2166번)
♣ 다각형의 넓이를 구하는 공식 CCW처럼 다각형의 넓이를 구하는 공식도 있다. CCW에서 본 신발끈 기법과 유사하다. 위와 같이 점들의 x, y 좌표가 주어지면 공식을 이용하여 면적을 구할 수 있다. 먼저 반시계 방향으로 꼭짓점 좌표들을 나열한다. 그리고 맨 처음 좌표를 맨 끝에 추가하여 나열한다. 신발끈 공식처럼 앞 꼭짓점의 x좌표와 뒷꼭짓점의 y좌표를 곱한 값들을 모두 더한다. 이번에는 반대로 앞 꼭짓점의 y좌표와 뒷꼭짓점의 x좌표를 곱한 값을 모두 더한다. 이제 첫 번째 결과에서 두 번째 결과를 뺀다 => 82-(-38) = 120 이 결과값을 2로 나누면 다각형의 넓이를 구할 수 있다. 단, 꼭짓점을 반시계 방향 대신 시계 방향으로 나열하여 계산하면 결과값이 음수가 된다. 그래서 음수가 나온 경..
2024.03.06 -
Pytorch로 시작하는 딥러닝 입문(05-04. 소프트맥스 회귀로 MNIST 데이터 분류하기)
이번에는 MNIST 데이터에 대해서 이해하고 파이토치로 소프트맥스 회귀를 구현하여 MNIST 데이터를 분류해보자♣ MNIST 데이터 이해하기MNIST는 숫자 0부터 9까지의 이미지로 구성된 손글씨 데이터셋이다. 총 60,000개의 훈련 데이터와 레이블, 총 10,000개의 테스트 데이터와 레이블로 구성되어 있다. 레이블은 0부터 9까지 총 10개이다. MNIST 문제는 손글씨로 적힌 숫자 이미지가 들어오면 그 이미지가 무슨 숫자인지 맞추는 문제이다. 각각의 이미지는 아래와 같이 28 픽셀 × 28 픽셀의 이미지이다. 이 이미지는 28 * 28 = 784 픽셀이므로, 각 이미지를 총 784개의 원소를 가진 벡터로 만든다. 즉 총 784개의 특성을 가진 샘플이 되는데, 이는 앞서 풀었던 문제들보다 특성이..
2024.03.06 -
Pytorch로 시작하는 딥러닝 입문(05-03. 소프트맥스 회귀 구현하기)
소프트맥스 회귀를 F.cross_entropy를 사용해서 구현해보자. ♣ 훈련 데이터와 레이블을 텐서로 선언하기 x_train 의 각 샘플은 4가지 특성을 가지고 있으며 총 8개의 샘플이 존재한다. y_train은 각 샘플에 대한 레이블인데, 0, 1, 2 의 값을 가지는 것으로 보아 총 3개의 클래스가 존재한다. ♣ 소프트맥스 회귀 구현하기(로우 레벨) x_train 의 크기는 8×4 이며 y_train의 크기는 8 × 1 이다. 최종 사용할 레이블은 y_train에서 원-핫 인코딩을 한 결과값이어야 한다. 클래스의 수가 3개이므로 y_train에 원-핫 인코딩한 결과는 8 × 3 의 개수를 가져야 한다. y_train에 원-핫 인코딩을 한 결과인 y_one_hot의 크기는 8 × 3 이다. 즉 W 행..
2024.03.03 -
Pytorch로 시작하는 딥러닝 입문(05-02. 소프트맥스 회귀 이해하기)
로지스틱 회귀를 이용하여 두 개의 선택지 중 한 개를 고르는 이진분류를 해결했다. 이번에는 소프트맥스 회귀를 이용하여 3개 이상의 선택지 중 한 개를 고르는 다중 클래스 분류(Multi-Class Classification)를 실습한다. ♣ 다중 클래스 분류(Multi-class Classification)세 개 이상의 답 중 하나를 고르는 문제는 다중 클래스 분류라고 한다. 아래 문제는 꽃받침 길이, 꽃받침 넓이, 꽃잎 길이, 꽃 넓이라는 4개의 특성으로부터 setosa, versicolor, virginica 라는 3개의 붓꽃 품종 중 어떤 품종인지를 예측하는 문제로, 전형적인 다중 클래스 분류 문제이다. 입력은 X, 가중치는 W, 편향은 B, 출력은 Y로 가정한다. (Y는 예측값이라는 의미를 가지..
2024.03.02 -
Pytorch로 시작하는 딥러닝 입문(05-01. 원-핫 인코딩/One-Hot Encoding)
♣ 원-핫 인코딩이란? 원-핫 인코딩은 선택해야 하는 선택지의 개수만큼의 차원을 가지면서, 각 선택지의 인덱스에 해당하는 원소에는 1, 나머지 원소는 0의 값을 가지도록 하는 표현 방법이다. 예를 들어 강아지, 고양이, 햄스터라는 3개의 선택지가 있다고 가정해보자. 우선 각 선택지에 순차적으로 정수 인덱스를 부여한다. 임의로 강아지는 0번, 고양이는 1번, 햄스터는 2번 인덱스를 부여한다. 각 선택지에 대해서 원-핫 인코딩 된 벡터는 아래와 같다. 강아지 = [1, 0, 0] 고양이 = [0, 1, 0] 햄스터 = [0, 0, 1] 총 선택지는 3개였으므로 위 벡터들은 모두 3차원의 벡터가 되었다. 이와 같이 원-핫 인코딩으로 표현된 벡터를 원-핫 벡터(one-hot vector)라고 한다. ♣ 원-핫 ..
2024.03.01 -
Pytorch로 시작하는 딥러닝 입문(04-04. 클래스로 파이토치 모델 구현하기)
파이토치의 대부분의 구현체들은 모델을 생성할 때 대부분 클래스를 사용한다. 앞서 배운 로지스틱 회귀를 클래스로 구현해보자. ♣ 모델을 클래스로 구현하기 앞서 로지스틱 회귀 모델은 다음과 같이 구현했다. 이를 클래스로 구현하면 다음과 같다. 클래스 형태의 모델은 nn.Module을 상속받는다. __init__( )에서는 모델의 구조와 동작을 정의하는 생성자를 정의한다. 이는 파이썬에서 객체가 갖는 속성값을 초기화하는 역할로, 객체가 생성될 때 자동으로 호출된다. super( ) 함수를 부르면 여기서 만든 클래스는 nn.Module 클래스의 속성들을 가지고 초기화된다. forward( ) 함수는 모델이 학습데이터를 입력받아서 forward 연산을 진행시키는 함수이다. forward( ) 함수는 model 객..
2024.02.29