
2025.02.13
Chapter 5. Basic of Pytorch
34. Pytorch 기초35. Pytorch 기초 2동일하게
import torch하여 import 한다.

requires_grad는 기울기를 계산할 수 있는 옵션이다.예를들어 아래의 그림과 같은 함수가 있다고 가정했을 때, x=3.5에 해당하는 y 값을 구하기 위해선...


여기서 x 가 tensor 이므로 y 또한 tensor 이다. 그리고 x 지점에서의 기울기를 알기 위해선 아래와 같다.


위는 간단하지만, 아래는 더 복잡한 식이면..


30a + 4 로 나온다.
torch로 진행해보면 아래와 같다.

- 이전 자료 참고하여 데이터 불러오기
Boston 집값 예측

필요한 모듈
IMPORT

데이터를
torch객체로 생성

tensor로 저장된다.
특성과 라벨로 분리 진행

하이퍼파라미터 설정



학습 시작



데이터 확인 및 df 변경

target_names(0 또는 1
'malignant' (악성), 'benign'(양성)
feature_names (30개)
'mean radius(반경)', 'mean texture(질감)', 'mean perimeter(둘레)', 'mean area',
'mean smoothness', 'mean compactness', 'mean concavity',
'mean concave points', 'mean symmetry', 'mean fractal dimension',
'radius error', 'texture error', 'perimeter error', 'area error',
'smoothness error', 'compactness error', 'concavity error',
'concave points error', 'symmetry error',
'fractal dimension error', 'worst radius', 'worst texture',
'worst perimeter', 'worst area', 'worst smoothness',
'worst compactness', 'worst concavity', 'worst concave points',
'worst symmetry', 'worst fractal dimension'

일부 관심있는 컬럼만 정리



관련 라이브러리 (torch) import 진행

마찬가지로 라벨(y)과 특성(x)로 분리진행, 파라미터 설정

n_epochs = 200000
learning_rate = 1e-2
print_interval = 10000
모델생성 - 단,
class로 만들기

class MyModel(nn.Module):
# nn.Module을 상속받아 PyTorch의 신경망 모델을 정의하는 클래스
def __init__(self, input_dim, output_dim):
# 클래스 생성자 (__init__)에서 입력 차원(input_dim)과 출력 차원(output_dim)을 받아 모델을 초기화
self.input_dim = input_dim
self.output_dim = output_dim
# 입력 차원과 출력 차원을 객체의 속성으로 저장
super().__init__()
# nn.Module의 생성자를 호출하여 PyTorch의 기본 신경망 기능을 사용할 수 있도록 함
self.linear = nn.Linear(input_dim, output_dim)
# 입력 차원에서 출력 차원으로 변환하는 선형(Linear) 계층을 정의
# nn.Linear(input_dim, output_dim)은 가중치 행렬과 편향을 포함한 선형 변환을 수행
self.act = nn.Sigmoid()
# 활성화 함수로 시그모이드(Sigmoid)를 정의
# Sigmoid 함수는 출력 값을 0과 1 사이로 변환하는 비선형 함수
def forward(self, x):
# 모델의 순전파(Forward) 연산을 정의하는 메서드
# 입력 x를 받아 변환된 출력을 반환
# |x| = (batch_size, input_dim)
# 입력 텐서 x의 크기를 설명하는 주석
# batch_size: 한 번에 처리하는 데이터 샘플 개수
y = self.act(self.linear(x))
# self.linear(x): 입력 x에 대해 선형 변환을 수행
# self.act(...): 선형 변환 결과에 Sigmoid 활성화 함수를 적용
# y의 크기는 (batch_size, output_dim)
# |y| = (batch_size, output_dim)
# 출력 y의 크기를 설명하는 주석
return y
# 변환된 출력 y를 반환
모델선언, loss, optim 선언

'''학습 시작'''
for i in range(n_epochs):
y_hat = model(x)
loss = crit(y_hat, y)
optimizer.zero_grad()
# PyTorch는 기본적으로 기울기를 누적하기 때문에, 새로운 기울기를 계산하기 전에 초기화해야 함
loss.backward()
# 손실을 모델의 모든 가중치에 대해 미분(Backpropagation)
# 역전파(Backpropagation)를 수행하여 각 가중치의 기울기(gradient) 를 계산
# 즉, 모델의 가중치를 얼마나 조정해야 하는지 정보 제공
optimizer.step()
if (i+1) % print_interval == 0 :
print('Epoch %d : loss = %.4e' % (i+1, loss))

결과확인
df = pd.DataFrame(torch.cat([y, y_hat], dim=1).detach().numpy(),
columns=['y', 'y_hat'])
sns.histplot(df, x='y_hat', hue='y', bins=50, stat='probability')
plt.show()
