Skip to content

2주차 과제 #3

@GirinMan

Description

@GirinMan

두 번째 과제: PyTorch로 딥러닝 모델 학습하기

회합 자료 링크: #1 (comment)

  • 미리 만들어진 colab notebook을 실행해보면서, 간단한 데이터 분류를 수행하는 모델을 학습시켜 봅시다!
  • 노트북 실행 방법은 지난 회합 자료 마지막 부분을 참고하세요.

Colab Python 노트북을 사용한 모델 학습 실습

  • Google 계정 로그인 후 colab에 접속해서 현재 레포지토리의 /Week2/train_neural_network.ipynb 노트북을 실행해보면서 아래와 같은 단계로 과제를 진행해 주세요.
  • 이번 과제에서 다룰 문제는 이진 분류(Binary Classification) 입니다. 간단하게 2차원 좌표 상에 있는 점들을 특정 기준에 따라 라벨을 1 또는 0으로 부여하고, 새로운 데이터가 들어왔을 때 모델이 적절한 라벨을 유추할 수 있도록 학습시켜 볼거에요!
  • 분류 대상인 데이터는 아래와 같이 생겼습니다.

x < -5 or x > 5 인 값 (x, y)에 대해 label=1
나머지 좌표에 대해서는 label=0

image

Step 1. Layer 1개로 구성된 모델로 이진 분류 학습시키기

  • 하나의 layer는 각각 weight와 bias를 지니고 있어 1차함수를 표현할 수 있습니다.
  • 주어진 데이터를 잘 분류하도록 모델을 학습시켜 봅시다.

Step 2. Layer 2개로 구성된 모델로 이진 분류 학습시키기

  • 하나의 layer밖에 없는 모델은 표현할 수 있는 범위에 한계가 있습니다.
  • Layer를 하나 더 추가해서 조금 더 복잡한 모델을 만들어 학습하고 결과를 확인해 봅시다.

Step 3. 새로운 데이터 분류하기

  • 아래와 같은 데이터들을 분류하는 모델을 만들어 보려고 합니다.
  • Layer가 1개인 모델과 2개인 모델 중 어떤 모델이 더 적합할까요?
  • 조별로 각각의 데이터에 대해 적합한 모델과, 그 이유를 적어주세요.
  • 실습 노트북에서 맨 처음 데이터 부분만 아래 코드로 바꿔서 실행해보면 결과를 알 수 있어요!

1번 데이터: x + y > 0 인 경우 label=1, 나머지 label=0

image

import random
import numpy as np

# 재현을 위해 seed 고정
random.seed(42)
np.random.seed(42)

x1_train=[]
x2_train=[]
y_train=[]

# 데이터 개수
m = 10000

for i in range(m):
    x1_train.append(random.uniform(-10, 10))
    x2_train.append(random.uniform(-10, 10))
    if x1_train[-1] + x2_train[-1] > 0:
        y_train.append(1)
    else:
        y_train.append(0)

x = np.array([x1_train, x2_train]).transpose()
y = np.array(y_train).reshape(-1, 1)

print(f"X: {x.shape}\n {x}")
print(f"Y: {y.shape}\n {y}")

2번 데이터: x * y > 0 인 경우 label=1, 나머지 label=0

image

import random
import numpy as np

# 재현을 위해 seed 고정
random.seed(42)
np.random.seed(42)

x1_train=[]
x2_train=[]
y_train=[]

# 데이터 개수
m = 10000

for i in range(m):
    x1_train.append(random.uniform(-10, 10))
    x2_train.append(random.uniform(-10, 10))
    if x1_train[-1] * x2_train[-1] > 0:
        y_train.append(1)
    else:
        y_train.append(0)

x = np.array([x1_train, x2_train]).transpose()
y = np.array(y_train).reshape(-1, 1)

print(f"X: {x.shape}\n {x}")
print(f"Y: {y.shape}\n {y}")

Metadata

Metadata

Assignees

Labels

assignment각 주차별 조별 과제 기록

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions