728x90
강화학습 자동매매 proj - 라즈베리파이 Pytorch 설치 & MNIST
라즈베리파이에 pytorch를 설치하고 mnist로 테스트해보자
0. 가상환경(virtual environment)
sudo apt update
sudo apt upgrade
python3 -m venv myenv
source myenv/bin/activate
1. pytorch install
파이토치와 파이비전을 설치하자.
pip install torch torchvision
2. 버전확인
설치한 pytorch의 버전을 확인해보자.
python -c "import torch; print(torch.__version__)"
3. mnist sample
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
import time
# GPU를 사용할 수 있다면 사용하고, 그렇지 않다면 CPU를 사용합니다.
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# 데이터 변환 정의
transform = transforms.Compose([
transforms.ToTensor(), # 이미지를 텐서로 변환
transforms.Normalize((0.5,), (0.5,)) # 이미지를 정규화
])
# MNIST 데이터셋 다운로드
train_dataset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)
# 데이터로더 설정
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)
# 신경망 모델 정의
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(28 * 28, 128)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = x.view(-1, 28 * 28) # 이미지를 1D로 펼침
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
# 모델, 손실 함수, 최적화 함수 정의
model = SimpleNN().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 훈련 함수 정의
def train(model, train_loader, criterion, optimizer, epochs=5):
for epoch in range(epochs):
start_time = time.time() # 현재 시간 기록
for inputs, labels in train_loader:
inputs, labels = inputs.to(device), labels.to(device)
optimizer.zero_grad() # 그래디언트 초기화
outputs = model(inputs) # 모델 순전파
loss = criterion(outputs, labels) # 손실 계산
loss.backward() # 역전파
optimizer.step() # 가중치 업데이트
end_time = time.time() # 현재 시간 기록
epoch_time = end_time - start_time # 에폭당 걸린 시간 계산
print(f"Epoch {epoch + 1}/{epochs}, Loss: {loss.item()}, Time: {epoch_time:.2f} seconds")
# 훈련 실행
train(model, train_loader, criterion, optimizer)
# 테스트 함수 정의
def test(model, test_loader):
model.eval()
correct = 0
total = 0
with torch.no_grad():
for inputs, labels in test_loader:
inputs, labels = inputs.to(device), labels.to(device)
outputs = model(inputs)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
accuracy = correct / total
print(f"Test Accuracy: {accuracy * 100:.2f}%")
# 테스트 실행
test(model, test_loader)
4. colab vs respberry vs AMD Ryzen 5 5500U with Radeon Graphics
colab과 라즈베리 성능을 비교해보자. colab은 T4 GPU를 사용했고, 노트북 cpu는 amd 라데온 5 5500u 내장그래픽이다
colab
Epoch 1/5, Loss: 0.30467528104782104, Time: 13.71 seconds
Epoch 2/5, Loss: 0.15264375507831573, Time: 13.71 seconds
Epoch 3/5, Loss: 0.32598111033439636, Time: 13.71 seconds
Epoch 4/5, Loss: 0.286398708820343, Time: 14.43 seconds
Epoch 5/5, Loss: 0.18845626711845398, Time: 13.78 seconds
Test Accuracy: 92.75%
AMD Ryzen 5 5500U with Radeon Graphics
Epoch 1/5, Loss: 0.2696661949157715, Time: 12.08 seconds
Epoch 2/5, Loss: 0.18215198814868927, Time: 11.54 seconds
Epoch 3/5, Loss: 0.1384127289056778, Time: 11.41 seconds
Epoch 4/5, Loss: 0.29524537920951843, Time: 11.67 seconds
Epoch 5/5, Loss: 0.2897138297557831, Time: 12.05 seconds
Test Accuracy: 92.74%
respberry pi 4 4gb
Epoch 1/5, Loss: 0.18655535578727722, Time: 69.62 seconds
Epoch 2/5, Loss: 0.49827146530151367, Time: 68.31 seconds
Epoch 3/5, Loss: 0.34614962339401245, Time: 68.06 seconds
Epoch 4/5, Loss: 0.1613757163286209, Time: 69.00 seconds
Epoch 5/5, Loss: 0.22222955524921417, Time: 68.35 seconds
Test Accuracy: 92.68%
728x90
'Dev > DL' 카테고리의 다른 글
Termux Ubuntu에서 Pytroch 설치 (0) | 2024.08.09 |
---|---|
Flask pytorch mnist 손글씨 인식 웹사이트 구동해보기 (0) | 2024.01.31 |
강화학습 자동매매 proj - 라즈비안 (Raspbian) OS + ssh 접속 (0) | 2024.01.27 |
안드로이드 termux 리눅스 - pytorch 설치 (0) | 2024.01.27 |