만약 데이터가 GPU를 사용해서 학습을 해야하는 상황이라면 코드 내에서 해당하는 데이터들을 GPU용 텐서로 변환해 주어야 한다. 먼저 device를 정의해주기 !
import torch
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
CNN
추가추가
RNN
데이터 처리
- 시퀀스 데이터를 만드는 함수 내에서 x_seq, y_seq를 변환 후 return
- y데이터는 view를 사용하여 2차원으로 바꿔준다. 왜냐하면 MSE Loss가 기본적으로 2차원 target data를 받기 때문 !
return torch.FloatTensor(x_seq).to(device), torch.FloatTensor(y_seq).to(device).view(-1, 1)
모델 만들기
- 모델을 만들 때 forward 함수에서 h0값을 device 처리해 준다.
h0 = torch.zeros(self.num_layers, x.size()[0], self.hidden_size).to(device)
모델 선언
- 모델 선언을 할 때 device 처리해 준다.
model = RNN(input_size=input_size,
hidden_size=hidden_size,
sequence_length=sequence_length,
num_layers=num_layers, device=device).to(device)
모델 학습
for epoch in range(50) :
...
for data in trainloader :
...
inputs, labels = data[0].to(device).squeeze(1), data[1].to(device)
...
# 학습 도중 정확도를 구할 때에는 변수 업데이트가 필요 없으므로 detach()를 사용해서 outputs의 requires_grad를 비활성화
_, predicted = torch.max(outputs.detach(), 1)
모델 평가
- 모델 평가할 때 특히나 주의 !
with torch.no_grad() :
pred = []
model.eval()
for data in dataloader :
seq, target = data
out = model(seq)
pred += out.cpu().tolist()
...
with torch.no_grad() :
model.eval()
for data in dataloader :
inputs, labels = data[0].to(device).squeeze(1), data[1].to(device)
outputs = model(inputs)
...
'Python > 라이브러리' 카테고리의 다른 글
[Pytorch] torch.max( ) & torch.argmax( ) (0) | 2023.01.30 |
---|---|
[Pytorch] Dataset, DataLoader (0) | 2023.01.27 |
[Python] 파이썬 파일 관련 코드들 (0) | 2023.01.20 |
[Matplotlib] 정리 (0) | 2023.01.20 |
[Pytorch] nn.Linear( ), MLP (0) | 2023.01.20 |