만약 데이터가 GPU를 사용해서 학습을 해야하는 상황이라면 코드 내에서 해당하는 데이터들을 GPU용 텐서로 변환해 주어야 한다. 먼저 device를 정의해주기 !
<python />
import torch
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
1. CNN
추가추가
2. RNN
2.1. 데이터 처리
- 시퀀스 데이터를 만드는 함수 내에서 x_seq, y_seq를 변환 후 return
- y데이터는 view를 사용하여 2차원으로 바꿔준다. 왜냐하면 MSE Loss가 기본적으로 2차원 target data를 받기 때문 !
<python />
return torch.FloatTensor(x_seq).to(device), torch.FloatTensor(y_seq).to(device).view(-1, 1)
2.2. 모델 만들기
- 모델을 만들 때 forward 함수에서 h0값을 device 처리해 준다.
<python />
h0 = torch.zeros(self.num_layers, x.size()[0], self.hidden_size).to(device)
2.3. 모델 선언
- 모델 선언을 할 때 device 처리해 준다.
<python />model = RNN(input_size=input_size, hidden_size=hidden_size, sequence_length=sequence_length, num_layers=num_layers, device=device).to(device)
2.4. 모델 학습
<python />
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)
2.5. 모델 평가
- 모델 평가할 때 특히나 주의 !
<python />
with torch.no_grad() :
pred = []
model.eval()
for data in dataloader :
seq, target = data
out = model(seq)
pred += out.cpu().tolist()
...
<python />
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)
...
'Programming > Pytorch' 카테고리의 다른 글
[Pytorch] torch.max( ) & torch.argmax( ) (0) | 2023.01.30 |
---|---|
[Pytorch] Dataset, DataLoader (0) | 2023.01.27 |
[Pytorch] nn.Linear( ), MLP (0) | 2023.01.20 |
[Pytorch] 텐서(차원) 관련 함수 정리 (0) | 2023.01.18 |
[Pytorch] 모듈 및 함수 정리 (0) | 2023.01.15 |