728x90
Pytorch 라이브러리 임포트
import torch
# 모델을 만들기 위해
import torch.nn as nn
gpu 확인
torch.cuda.is_available()
모델 만들기
1. nn.Sequential 이용
2. nn.Module을 상속받는 클래스 이용
두 가지 방법을 사용하여
이진분류 모델을 만들어보겠습니다(이진분류는 아웃풋이 1개)
인풋은 4개, 활성화 함수는 ReLU를 사용하겠습니다.
nn.Linear(), nn.ReLU() 사용
모델 구조
4 -> 128 -> 64 -> 1
1. nn.Sequential 이용
순차적으로 쌓아서 만드는 방법
간단한 신경망 아키텍처 만들 때 사용한다
# 선형으로 = fully connected
model = nn.Sequential(
nn.Linear(4,128), # 인풋은 4개(데이터의 피처가 4개) 아웃풋은 128개
nn.ReLU(), # 128개 모두에 활성화 함수 거침
nn.Linear(128,64), # 인풋은 128개 아웃풋은 64
nn.ReLU(), # 64개 모두에 활성화 함수 거침
nn.Linear(64,1) # 인풋은 64개 아웃풋은 1개
)
만들어진 모델 아키텍처 확인
model
모델의 각 층 보기
model[0]
2. nn.Module을 상속받는 클래스 이용
nn.Sequential보다 더 복잡한 모델을 만들 때 사용
커스텀 레이어나 복잡한 순전파 과정이 필요할 경우에 사용
nn.Module을 상속받는 클래스를 생성한다
__init__ 생성자와
forward 순전파를 위한 메소드를 만든다.
# nn.Module 상속 받음. nn.Module의 기능을 내 것처럼 사용하겠다
class Net(nn.Module):
# 생성자 만들기
def __init__(self):
# 부모 클래스(nn.Module)의 생성자를 호출
# (Net: 다중 상속에서 올바른 초기화를 보장)
# (self: 현재 인스턴스를 부모 클래스에 전달)
super(Net, self).__init__()
# 변수 쓸 거라고 선언만 한 상태
self.fc1 = nn.Linear(4, 128)
self.fc1_act = nn.ReLU()
self.fc2 = nn.Linear(128, 64)
self.fc2_act = nn.ReLU()
self.fc3 = nn.Linear(64, 1)
# 순전파
def forward(self, x): # input 값 (배치 수, 인풋 레이어 퍼셉트론 수)
x = self.fc1(x)
x = self.fc1_act(x)
x = self.fc2(x)
x = self.fc2_act(x)
x = self.fc3(x)
return x # 에측된 값
인스턴스 생성
model = Net()
model
모델의 각 층 보기
model.이름
nn.Module로 만든 model을 통해 확인해보겠습니다.
모델이 가진 파라미터 뽑기
model.parameters()
리스트로 바꿔서 보기
list(model.parameters())
각 층의 파라미터 값(weight, bias)들이 쭉 나온다
model.named_parameters 사용
named_parameters(): 모델의 이름과 파라미터를 반환
# fc1, fc2, fc3의 가중치와 편향 활성화함수는 가중치 필요 X
for name, parm in model.named_parameters():
print(name)
파라미터 보기
# 64 -> 1
model.fc3.weight.shape
model.fc3.bias.shape
weight shape이 (64,1)이 아닌 이유
: nn.Linear의 공식이
이기 때문에
- Input: (batch_size,in_features)
- Weight: (out_features,in_features)
- Bias: (out_features)
- Output: (batch_size,out_features)
weight가 transpose되어 저장된다
피처(인풋)가 4개인 데이터 100개 만들기
data = torch.rand(100,4)
data
100행 4열
이 데이터를 model에 넣는다
model(data).shape
model의 아웃풋은 1개이기 때문에 (100,1)의 shape이 나온다
'Pytorch' 카테고리의 다른 글
[파이토치] iris 데이터를 위한 신경망 만들어보기 (0) | 2024.12.24 |
---|---|
[파이토치] 모델 학습하기 (0) | 2024.12.23 |
[파이토치] 기본2 (0) | 2024.08.01 |
[Pytorch] 모델 저장하기, 불러오기 (0) | 2024.07.23 |
[Pytorch] 텐서(Tensor) 자료형 (0) | 2024.07.16 |